rv32g-core

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

ma_data.S (15420B)


      1 # See LICENSE for license details.
      2 
      3 #*****************************************************************************
      4 # ma_data.S
      5 #-----------------------------------------------------------------------------
      6 #
      7 # Test misaligned ld/st data.
      8 # Based on rv64mi-ma_addr.S
      9 #
     10 
     11 #include "riscv_test.h"
     12 #include "test_macros.h"
     13 
     14 RVTEST_RV64U
     15 RVTEST_CODE_BEGIN
     16 
     17   la s0, data
     18 
     19 #define SEXT(x, n) ((-((x) >> ((n)-1)) << (n)) | ((x) & ((1 << (n))-1)))
     20 
     21 /* Check that a misaligned load reads the correct value. */
     22 #define MISALIGNED_LOAD_TEST(testnum, insn, base, offset, res) \
     23   li TESTNUM, testnum; \
     24   li t1, res; \
     25   insn t2, offset(base); \
     26   bne t1, t2, fail; \
     27 1:
     28 
     29 # within quadword
     30   MISALIGNED_LOAD_TEST(1,  lh,  s0, 1, SEXT(0x0201, 16))
     31   MISALIGNED_LOAD_TEST(2,  lhu, s0, 1, 0x0201)
     32   MISALIGNED_LOAD_TEST(3,  lw,  s0, 1, SEXT(0x04030201, 32))
     33   MISALIGNED_LOAD_TEST(4,  lw,  s0, 2, SEXT(0x05040302, 32))
     34   MISALIGNED_LOAD_TEST(5,  lw,  s0, 3, SEXT(0x06050403, 32))
     35 
     36 #if __riscv_xlen == 64
     37   MISALIGNED_LOAD_TEST(6,  lwu, s0, 1, 0x04030201)
     38   MISALIGNED_LOAD_TEST(7,  lwu, s0, 2, 0x05040302)
     39   MISALIGNED_LOAD_TEST(8,  lwu, s0, 3, 0x06050403)
     40 
     41   MISALIGNED_LOAD_TEST(9,  ld, s0, 1, 0x0807060504030201)
     42   MISALIGNED_LOAD_TEST(10, ld, s0, 2, 0x0908070605040302)
     43   MISALIGNED_LOAD_TEST(11, ld, s0, 3, 0x0a09080706050403)
     44   MISALIGNED_LOAD_TEST(12, ld, s0, 4, 0x0b0a090807060504)
     45   MISALIGNED_LOAD_TEST(13, ld, s0, 5, 0x0c0b0a0908070605)
     46   MISALIGNED_LOAD_TEST(14, ld, s0, 6, 0x0d0c0b0a09080706)
     47   MISALIGNED_LOAD_TEST(15, ld, s0, 7, 0x0e0d0c0b0a090807)
     48 #endif
     49 
     50 # octword crossing
     51   MISALIGNED_LOAD_TEST(16, lh,  s0, 31, SEXT(0x201f, 16))
     52   MISALIGNED_LOAD_TEST(17, lhu, s0, 31, 0x201f)
     53   MISALIGNED_LOAD_TEST(18, lw,  s0, 29, SEXT(0x201f1e1d, 32))
     54   MISALIGNED_LOAD_TEST(19, lw,  s0, 30, SEXT(0x21201f1e, 32))
     55   MISALIGNED_LOAD_TEST(20, lw,  s0, 31, SEXT(0x2221201f, 32))
     56 
     57 #if __riscv_xlen == 64
     58   MISALIGNED_LOAD_TEST(21, lwu, s0, 29, 0x201f1e1d)
     59   MISALIGNED_LOAD_TEST(22, lwu, s0, 30, 0x21201f1e)
     60   MISALIGNED_LOAD_TEST(23, lwu, s0, 31, 0x2221201f)
     61 
     62   MISALIGNED_LOAD_TEST(24, ld, s0, 25, 0x201f1e1d1c1b1a19)
     63   MISALIGNED_LOAD_TEST(25, ld, s0, 26, 0x21201f1e1d1c1b1a)
     64   MISALIGNED_LOAD_TEST(26, ld, s0, 27, 0x2221201f1e1d1c1b)
     65   MISALIGNED_LOAD_TEST(27, ld, s0, 28, 0x232221201f1e1d1c)
     66   MISALIGNED_LOAD_TEST(28, ld, s0, 29, 0x24232221201f1e1d)
     67   MISALIGNED_LOAD_TEST(29, ld, s0, 30, 0x2524232221201f1e)
     68   MISALIGNED_LOAD_TEST(30, ld, s0, 31, 0x262524232221201f)
     69 #endif
     70 
     71 # cacheline crossing
     72   MISALIGNED_LOAD_TEST(31, lh,  s0, 63, SEXT(0x403f, 16))
     73   MISALIGNED_LOAD_TEST(32, lhu, s0, 63, 0x403f)
     74   MISALIGNED_LOAD_TEST(33, lw,  s0, 61, SEXT(0x403f3e3d, 32))
     75   MISALIGNED_LOAD_TEST(34, lw,  s0, 62, SEXT(0x41403f3e, 32))
     76   MISALIGNED_LOAD_TEST(35, lw,  s0, 63, SEXT(0x4241403f, 32))
     77 
     78 #if __riscv_xlen == 64
     79   MISALIGNED_LOAD_TEST(36, lwu, s0, 61, 0x403f3e3d)
     80   MISALIGNED_LOAD_TEST(37, lwu, s0, 62, 0x41403f3e)
     81   MISALIGNED_LOAD_TEST(38, lwu, s0, 63, 0x4241403f)
     82 
     83   MISALIGNED_LOAD_TEST(39, ld, s0, 57, 0x403f3e3d3c3b3a39)
     84   MISALIGNED_LOAD_TEST(40, ld, s0, 58, 0x41403f3e3d3c3b3a)
     85   MISALIGNED_LOAD_TEST(41, ld, s0, 59, 0x4241403f3e3d3c3b)
     86   MISALIGNED_LOAD_TEST(42, ld, s0, 60, 0x434241403f3e3d3c)
     87   MISALIGNED_LOAD_TEST(43, ld, s0, 61, 0x44434241403f3e3d)
     88   MISALIGNED_LOAD_TEST(44, ld, s0, 62, 0x4544434241403f3e)
     89   MISALIGNED_LOAD_TEST(45, ld, s0, 63, 0x464544434241403f)
     90 #endif
     91 
     92 
     93 /* Check that a misaligned store writes the correct value. */
     94 #define MISALIGNED_STORE_TEST(testnum, st_insn, ld_insn, base, offset, st_data) \
     95   li TESTNUM, testnum; \
     96   li t1, st_data; \
     97   st_insn t1, offset(base); \
     98   ld_insn t2, offset(base); \
     99   bne t1, t2, fail; \
    100 1:
    101 
    102 # within quadword
    103   MISALIGNED_STORE_TEST(46, sh, lh,  s0, 1, SEXT(0x8180, 16))
    104   MISALIGNED_STORE_TEST(47, sh, lhu, s0, 1, 0x8382)
    105   MISALIGNED_STORE_TEST(48, sw, lw,  s0, 1, SEXT(0x87868584, 32))
    106   MISALIGNED_STORE_TEST(49, sw, lw,  s0, 2, SEXT(0x8b8a8988, 32))
    107   MISALIGNED_STORE_TEST(50, sw, lw,  s0, 3, SEXT(0x8f8e8d8c, 32))
    108 
    109 #if __riscv_xlen == 64
    110   MISALIGNED_STORE_TEST(51, sw, lwu, s0, 1, 0x93929190)
    111   MISALIGNED_STORE_TEST(52, sw, lwu, s0, 2, 0x97969594)
    112   MISALIGNED_STORE_TEST(53, sw, lwu, s0, 3, 0x9b9a9998)
    113 
    114   MISALIGNED_STORE_TEST(54, sd, ld, s0, 1, 0xa3a2a1a09f9e9d9c)
    115   MISALIGNED_STORE_TEST(55, sd, ld, s0, 2, 0xabaaa9a8a7a6a5a4)
    116   MISALIGNED_STORE_TEST(56, sd, ld, s0, 3, 0xb3b2b1b0afaeadac)
    117   MISALIGNED_STORE_TEST(57, sd, ld, s0, 4, 0xbbbab9b8b7b6b5b4)
    118   MISALIGNED_STORE_TEST(58, sd, ld, s0, 5, 0xc3c2c1c0bfbebdbc)
    119   MISALIGNED_STORE_TEST(59, sd, ld, s0, 6, 0xcbcac9c8c7c6c5c4)
    120   MISALIGNED_STORE_TEST(60, sd, ld, s0, 7, 0xd3d2d1d0cfcecdcc)
    121 #endif
    122 
    123 # octword crossing
    124   MISALIGNED_STORE_TEST(61, sh, lh,  s0, 31, SEXT(0xd5d4, 16))
    125   MISALIGNED_STORE_TEST(62, sh, lhu, s0, 31, 0xd7d6)
    126   MISALIGNED_STORE_TEST(63, sw, lw,  s0, 29, SEXT(0xdbdad9d8, 32))
    127   MISALIGNED_STORE_TEST(64, sw, lw,  s0, 30, SEXT(0xdfdedddc, 32))
    128   MISALIGNED_STORE_TEST(65, sw, lw,  s0, 31, SEXT(0xe3e2e1e0, 32))
    129 
    130 #if __riscv_xlen == 64
    131   MISALIGNED_STORE_TEST(66, sw, lwu, s0, 29, 0xe7e6e5e4)
    132   MISALIGNED_STORE_TEST(67, sw, lwu, s0, 30, 0xebeae9e8)
    133   MISALIGNED_STORE_TEST(68, sw, lwu, s0, 31, 0xefeeedec)
    134 
    135   MISALIGNED_STORE_TEST(69, sd, ld, s0, 25, 0xf7f6f5f4f3f2f1f0)
    136   MISALIGNED_STORE_TEST(70, sd, ld, s0, 26, 0xfffefdfcfbfaf9f8)
    137   MISALIGNED_STORE_TEST(71, sd, ld, s0, 27, 0x0706050403020100)
    138   MISALIGNED_STORE_TEST(72, sd, ld, s0, 28, 0x0f0e0d0c0b0a0908)
    139   MISALIGNED_STORE_TEST(73, sd, ld, s0, 29, 0x1716151413121110)
    140   MISALIGNED_STORE_TEST(74, sd, ld, s0, 30, 0x1f1e1d1c1b1a1918)
    141   MISALIGNED_STORE_TEST(75, sd, ld, s0, 31, 0x2726252423222120)
    142 #endif
    143 
    144 # cacheline crossing
    145   MISALIGNED_STORE_TEST(76, sh, lh,  s0, 63, SEXT(0x3534, 16))
    146   MISALIGNED_STORE_TEST(77, sh, lhu, s0, 63, 0x3736)
    147   MISALIGNED_STORE_TEST(78, sw, lw,  s0, 61, SEXT(0x3b3a3938, 32))
    148   MISALIGNED_STORE_TEST(79, sw, lw,  s0, 62, SEXT(0x3f3e3d3c, 32))
    149   MISALIGNED_STORE_TEST(80, sw, lw,  s0, 63, SEXT(0x43424140, 32))
    150 
    151 #if __riscv_xlen == 64
    152   MISALIGNED_STORE_TEST(81, sw, lwu, s0, 61, 0x47464544)
    153   MISALIGNED_STORE_TEST(82, sw, lwu, s0, 62, 0x4b4a4948)
    154   MISALIGNED_STORE_TEST(83, sw, lwu, s0, 63, 0x4f4e4d4c)
    155 
    156   MISALIGNED_STORE_TEST(84, sd, ld, s0, 57, 0x5756555453525150)
    157   MISALIGNED_STORE_TEST(85, sd, ld, s0, 58, 0x5f5e5d5c5b5a5958)
    158   MISALIGNED_STORE_TEST(86, sd, ld, s0, 59, 0x6766656463626160)
    159   MISALIGNED_STORE_TEST(87, sd, ld, s0, 60, 0x6f6e6d6c6b6a6968)
    160   MISALIGNED_STORE_TEST(88, sd, ld, s0, 61, 0x7776757473727170)
    161   MISALIGNED_STORE_TEST(89, sd, ld, s0, 62, 0x7f7e7d7c7b7a7978)
    162   MISALIGNED_STORE_TEST(90, sd, ld, s0, 63, 0x8786858483828180)
    163 #endif
    164 
    165 
    166 /* Check that a misaligned store writes the correct value, checked by a narrower load. */
    167 #define MISMATCHED_STORE_TEST(testnum, st_insn, ld_insn, base, st_offset, ld_offset, st_data, ld_data) \
    168   li TESTNUM, testnum; \
    169   li t1, st_data; \
    170   li t2, ld_data; \
    171   st_insn t1, st_offset(base); \
    172   ld_insn t3, ld_offset(base); \
    173   bne t2, t3, fail; \
    174 1:
    175 
    176 # within quadword
    177   MISMATCHED_STORE_TEST(91,  sh, lb,  s0, 1, 1, 0x9998, SEXT(0x98, 8))
    178   MISMATCHED_STORE_TEST(92,  sh, lb,  s0, 1, 2, 0x9b9a, SEXT(0x9b, 8))
    179   MISMATCHED_STORE_TEST(93,  sh, lbu, s0, 1, 1, 0x9d9c, 0x9c)
    180   MISMATCHED_STORE_TEST(94,  sh, lbu, s0, 1, 2, 0x9f9e, 0x9f)
    181   MISMATCHED_STORE_TEST(95,  sw, lb,  s0, 1, 1, 0xa3a2a1a0, SEXT(0xa0, 8))
    182   MISMATCHED_STORE_TEST(96,  sw, lbu, s0, 2, 3, 0xa7a6a5a4, 0xa5)
    183   MISMATCHED_STORE_TEST(97,  sw, lh,  s0, 3, 4, 0xabaaa9a8, SEXT(0xaaa9, 16))
    184   MISMATCHED_STORE_TEST(98,  sw, lhu, s0, 3, 5, 0xafaeadac, 0xafae)
    185 
    186 #if __riscv_xlen == 64
    187   MISMATCHED_STORE_TEST(99,  sd, lb,  s0, 1, 7, 0xb7b6b5b4b3b2b1b0, SEXT(0xb6, 8))
    188   MISMATCHED_STORE_TEST(100, sd, lbu, s0, 2, 3, 0xbfbebdbcbbbab9b8, 0xb9)
    189   MISMATCHED_STORE_TEST(101, sd, lh,  s0, 3, 9, 0xc7c6c5c4c3c2c1c0, SEXT(0xc7c6, 16))
    190   MISMATCHED_STORE_TEST(102, sd, lhu, s0, 4, 5, 0xcfcecdcccbcac9c8, 0xcac9)
    191   MISMATCHED_STORE_TEST(103, sd, lw,  s0, 5, 9, 0xd7d6d5d4d3d2d1d0, SEXT(0xd7d6d5d4, 32))
    192   MISMATCHED_STORE_TEST(104, sd, lw,  s0, 6, 8, 0xdfdedddcdbdad9d8, SEXT(0xdddcdbda, 32))
    193   MISMATCHED_STORE_TEST(105, sd, lwu, s0, 7, 8, 0xe7e6e5e4e3e2e1e0, 0xe4e3e2e1)
    194 #endif
    195 
    196 # octword crossing
    197   MISMATCHED_STORE_TEST(106, sh, lb,  s0, 31, 31, 0xe9e8, SEXT(0xe8, 8))
    198   MISMATCHED_STORE_TEST(107, sh, lb,  s0, 31, 32, 0xebea, SEXT(0xeb, 8))
    199   MISMATCHED_STORE_TEST(108, sh, lbu, s0, 31, 31, 0xedec, 0xec)
    200   MISMATCHED_STORE_TEST(109, sh, lbu, s0, 31, 32, 0xefee, 0xef)
    201   MISMATCHED_STORE_TEST(110, sw, lb,  s0, 29, 29, 0xf3f2f1f0, SEXT(0xf0, 8))
    202   MISMATCHED_STORE_TEST(111, sw, lbu, s0, 30, 32, 0xf7f6f5f4, 0xf6)
    203   MISMATCHED_STORE_TEST(112, sw, lh,  s0, 29, 31, 0xfbfaf9f8, SEXT(0xfbfa, 16))
    204   MISMATCHED_STORE_TEST(113, sw, lhu, s0, 31, 31, 0xfffefdfc, 0xfdfc)
    205 
    206 #if __riscv_xlen == 64
    207   MISMATCHED_STORE_TEST(114, sd, lb,  s0, 25, 32, 0x0706050403020100, SEXT(0x07, 8))
    208   MISMATCHED_STORE_TEST(115, sd, lbu, s0, 26, 33, 0x0f0e0d0c0b0a0908, 0x0f)
    209   MISMATCHED_STORE_TEST(116, sd, lh,  s0, 27, 31, 0x1716151413121110, SEXT(0x1514, 16))
    210   MISMATCHED_STORE_TEST(117, sd, lhu, s0, 28, 31, 0x1f1e1d1c1b1a1918, 0x1c1b)
    211   MISMATCHED_STORE_TEST(118, sd, lw,  s0, 29, 29, 0x2726252423222120, SEXT(0x23222120, 32))
    212   MISMATCHED_STORE_TEST(119, sd, lw,  s0, 30, 30, 0x2f2e2d2c2b2a2928, SEXT(0x2b2a2928, 32))
    213   MISMATCHED_STORE_TEST(120, sd, lwu, s0, 31, 31, 0x3736353433323130, 0x33323130)
    214 #endif
    215 
    216 # cacheline crossing
    217   MISMATCHED_STORE_TEST(121, sh, lb,  s0, 63, 63, 0x4948, SEXT(0x48, 8))
    218   MISMATCHED_STORE_TEST(122, sh, lb,  s0, 63, 64, 0x4b4a, SEXT(0x4b, 8))
    219   MISMATCHED_STORE_TEST(123, sh, lbu, s0, 63, 63, 0x4d4c, 0x4c)
    220   MISMATCHED_STORE_TEST(124, sh, lbu, s0, 63, 64, 0x4f4e, 0x4f)
    221   MISMATCHED_STORE_TEST(125, sw, lb,  s0, 61, 61, 0x53525150, SEXT(0x50, 8))
    222   MISMATCHED_STORE_TEST(126, sw, lbu, s0, 62, 64, 0x57565554, 0x56)
    223   MISMATCHED_STORE_TEST(127, sw, lh,  s0, 61, 63, 0x5b5a5958, SEXT(0x5b5a, 16))
    224   MISMATCHED_STORE_TEST(128, sw, lhu, s0, 63, 63, 0x5f5e5d5c, 0x5d5c)
    225 
    226 #if __riscv_xlen == 64
    227   MISMATCHED_STORE_TEST(129, sd, lb,  s0, 57, 64, 0x6766656463626160, SEXT(0x67, 8))
    228   MISMATCHED_STORE_TEST(130, sd, lbu, s0, 58, 65, 0x6f6e6d6c6b6a6968, 0x6f)
    229   MISMATCHED_STORE_TEST(131, sd, lh,  s0, 59, 63, 0x7776757473727170, SEXT(0x7574, 16))
    230   MISMATCHED_STORE_TEST(132, sd, lhu, s0, 60, 63, 0x7f7e7d7c7b7a7978, 0x7c7b)
    231   MISMATCHED_STORE_TEST(133, sd, lw,  s0, 61, 61, 0x8786858483828180, SEXT(0x83828180, 32))
    232   MISMATCHED_STORE_TEST(134, sd, lw,  s0, 62, 62, 0x8f8e8d8c8b8a8988, SEXT(0x8b8a8988, 32))
    233   MISMATCHED_STORE_TEST(135, sd, lwu, s0, 63, 63, 0x9796959493929190, 0x93929190)
    234 #endif
    235 
    236 /* Memory contents at this point should be:
    237 .word 0x10080000
    238 .word 0x30282018
    239 .word 0x34333231
    240 .word 0x0f373635
    241 .word 0x13121110
    242 .word 0x17161514
    243 .word 0x10080018
    244 .word 0x30282018
    245 
    246 .word 0x34333231
    247 .word 0x27373635
    248 .word 0x2b2a2928
    249 .word 0x2f2e2d2c
    250 .word 0x33323130
    251 .word 0x37363534
    252 .word 0x70686038
    253 .word 0x90888078
    254 
    255 .word 0x94939291
    256 .word 0x47979695
    257 .word 0x4b4a4948
    258 .word 0x4f4e4d4c
    259 .word 0x53525150
    260 .word 0x57565554
    261 .word 0x5b5a5958
    262 .word 0x5f5e5d5c
    263 .word 0x63626160
    264 .word 0x67666564
    265 .word 0x6b6a6968
    266 .word 0x6f6e6d6c
    267 .word 0x73727170
    268 .word 0x77767574
    269 .word 0x7b7a7978
    270 .word 0x7f7e7d7c
    271 */
    272 
    273 /* Check that a misaligned store writes the correct value, checked by a wider load. */
    274 
    275 #if __riscv_xlen == 64
    276 # within quadword
    277   MISMATCHED_STORE_TEST(136, sb, lh,  s0, 1, 1, 0x98, SEXT(0xb898, 16))
    278   MISMATCHED_STORE_TEST(137, sb, lhu, s0, 2, 1, 0x99, 0x9998)
    279   MISMATCHED_STORE_TEST(138, sh, lw,  s0, 1, 1, 0x9b9a, SEXT(0xc8c09b9a, 32))
    280   MISMATCHED_STORE_TEST(139, sh, lw,  s0, 3, 2, 0x9d9c, SEXT(0xd09d9c9b, 32))
    281   MISMATCHED_STORE_TEST(140, sh, lw,  s0, 5, 3, 0x9f9e, SEXT(0x9f9e9d9c, 32))
    282 
    283   MISMATCHED_STORE_TEST(141, sb, lwu, s0, 2, 1, 0xa0, 0x9d9ca09a)
    284   MISMATCHED_STORE_TEST(142, sh, lwu, s0, 3, 2, 0xa2a1, 0x9ea2a1a0)
    285   MISMATCHED_STORE_TEST(143, sh, lwu, s0, 5, 3, 0xa4a3, 0xa4a3a2a1)
    286 
    287   MISMATCHED_STORE_TEST(144, sb, ld, s0, 2,  1, 0xa5, 0xe1e0a4a3a2a1a59a)
    288   MISMATCHED_STORE_TEST(145, sh, ld, s0, 7,  2, 0xa7a6, 0xe2a7a6a4a3a2a1a5)
    289   MISMATCHED_STORE_TEST(146, sh, ld, s0, 9,  3, 0xa9a8, 0xa9a8a7a6a4a3a2a1)
    290   MISMATCHED_STORE_TEST(147, sw, ld, s0, 5,  4, 0xadacabaa, 0xe4a9a8adacabaaa2)
    291   MISMATCHED_STORE_TEST(148, sw, ld, s0, 7,  5, 0xb1b0afae, 0xe5e4b1b0afaeabaa)
    292   MISMATCHED_STORE_TEST(149, sw, ld, s0, 9,  6, 0xb5b4b3b2, 0xe6b5b4b3b2afaeab)
    293   MISMATCHED_STORE_TEST(150, sw, ld, s0, 11, 7, 0xb9b8b7b6, 0xb9b8b7b6b3b2afae)
    294 
    295 # octword crossing
    296   MISMATCHED_STORE_TEST(151, sb, lh,  s0, 31, 31, 0xba, SEXT(0x31ba, 16))
    297   MISMATCHED_STORE_TEST(152, sb, lhu, s0, 32, 31, 0xbb, 0xbbba)
    298   MISMATCHED_STORE_TEST(153, sh, lw,  s0, 30, 30, 0xbdbc, SEXT(0x32bbbdbc, 32))
    299   MISMATCHED_STORE_TEST(154, sh, lw,  s0, 31, 30, 0xbfbe, SEXT(0x32bfbebc, 32))
    300   MISMATCHED_STORE_TEST(155, sh, lw,  s0, 32, 30, 0xc1c0, SEXT(0xc1c0bebc, 32))
    301 
    302   MISMATCHED_STORE_TEST(156, sb, lwu, s0, 32, 31, 0xc2, 0x33c1c2be)
    303   MISMATCHED_STORE_TEST(157, sh, lwu, s0, 31, 29, 0xc4c3, 0xc4c3bc20)
    304   MISMATCHED_STORE_TEST(158, sh, lwu, s0, 32, 30, 0xc6c5, 0xc6c5c3bc)
    305 
    306   MISMATCHED_STORE_TEST(159, sb, ld, s0, 32, 25, 0xc7, 0xc7c3bc2018100800)
    307   MISMATCHED_STORE_TEST(160, sh, ld, s0, 31, 26, 0xc9c8, 0xc6c9c8bc20181008)
    308   MISMATCHED_STORE_TEST(161, sh, ld, s0, 31, 27, 0xcbca, 0x33c6cbcabc201810)
    309   MISMATCHED_STORE_TEST(162, sw, ld, s0, 32, 28, 0xcfcecdcc, 0xcfcecdcccabc2018)
    310   MISMATCHED_STORE_TEST(163, sw, ld, s0, 31, 29, 0xd3d2d1d0, 0x35cfd3d2d1d0bc20)
    311   MISMATCHED_STORE_TEST(164, sw, ld, s0, 30, 30, 0xd7d6d5d4, 0x3635cfd3d7d6d5d4)
    312   MISMATCHED_STORE_TEST(165, sw, ld, s0, 29, 31, 0xdbdad9d8, 0x373635cfd3d7dbda)
    313 
    314 # cacheline crossing
    315   MISMATCHED_STORE_TEST(166, sb, lh,  s0, 63, 63, 0xdc, SEXT(0x91dc, 16))
    316   MISMATCHED_STORE_TEST(167, sb, lhu, s0, 64, 63, 0xdd, 0xdddc)
    317   MISMATCHED_STORE_TEST(168, sh, lw,  s0, 62, 62, 0xdfde, SEXT(0x92dddfde, 32))
    318   MISMATCHED_STORE_TEST(169, sh, lw,  s0, 63, 62, 0xe1e0, SEXT(0x92e1e0de, 32))
    319   MISMATCHED_STORE_TEST(170, sh, lw,  s0, 64, 62, 0xe3e2, SEXT(0xe3e2e0de, 32))
    320 
    321   MISMATCHED_STORE_TEST(171, sb, lwu, s0, 64, 63, 0xe4, 0x93e3e4e0)
    322   MISMATCHED_STORE_TEST(172, sh, lwu, s0, 63, 61, 0xe6e5, 0xe6e5de80)
    323   MISMATCHED_STORE_TEST(173, sh, lwu, s0, 64, 62, 0xe8e7, 0xe8e7e5de)
    324 
    325   MISMATCHED_STORE_TEST(174, sb, ld, s0, 64, 57, 0xe9, 0xe9e5de8078706860)
    326   MISMATCHED_STORE_TEST(175, sh, ld, s0, 63, 58, 0xebea, 0xe8ebeade80787068)
    327   MISMATCHED_STORE_TEST(176, sh, ld, s0, 63, 59, 0xedec, 0x93e8edecde807870)
    328   MISMATCHED_STORE_TEST(177, sw, ld, s0, 64, 60, 0xf1f0efee, 0xf1f0efeeecde8078)
    329   MISMATCHED_STORE_TEST(178, sw, ld, s0, 63, 61, 0xf5f4f3f2, 0x95f1f5f4f3f2de80)
    330   MISMATCHED_STORE_TEST(179, sw, ld, s0, 62, 62, 0xf9f8f7f6, 0x9695f1f5f9f8f7f6)
    331   MISMATCHED_STORE_TEST(180, sw, ld, s0, 61, 63, 0xfdfcfbfa, 0x979695f1f5f9fdfc)
    332 #endif
    333 
    334   TEST_PASSFAIL
    335 
    336 RVTEST_CODE_END
    337 
    338   .data
    339 RVTEST_DATA_BEGIN
    340 
    341 data:
    342   .align 3
    343 
    344 .word 0x03020100
    345 .word 0x07060504
    346 .word 0x0b0a0908
    347 .word 0x0f0e0d0c
    348 .word 0x13121110
    349 .word 0x17161514
    350 .word 0x1b1a1918
    351 .word 0x1f1e1d1c
    352 .word 0x23222120
    353 .word 0x27262524
    354 .word 0x2b2a2928
    355 .word 0x2f2e2d2c
    356 .word 0x33323130
    357 .word 0x37363534
    358 .word 0x3b3a3938
    359 .word 0x3f3e3d3c
    360 
    361 .word 0x43424140
    362 .word 0x47464544
    363 .word 0x4b4a4948
    364 .word 0x4f4e4d4c
    365 .word 0x53525150
    366 .word 0x57565554
    367 .word 0x5b5a5958
    368 .word 0x5f5e5d5c
    369 .word 0x63626160
    370 .word 0x67666564
    371 .word 0x6b6a6968
    372 .word 0x6f6e6d6c
    373 .word 0x73727170
    374 .word 0x77767574
    375 .word 0x7b7a7978
    376 .word 0x7f7e7d7c
    377 
    378 .fill 0xff, 1, 80
    379 
    380 
    381   TEST_DATA
    382 
    383 RVTEST_DATA_END