filename | test/sh4/testutlb.s |
changeset | 976:e57a25d9eb7d |
next | 1044:01e46b0aafaf |
author | nkeynes |
date | Sun Jun 14 21:46:05 2009 +0000 (14 years ago) |
permissions | -rw-r--r-- |
last change | Add -framework Carbon to go with previous change (SetSystemUIMode is tucked away in Carbon) |
file | annotate | diff | log | raw |
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +00001.2 +++ b/test/sh4/testutlb.s Sun Jun 14 21:46:05 2009 +00001.3 @@ -0,0 +1,720 @@1.4 +1.5 +1.6 +.global _install_utlb_test_handler1.7 +_install_utlb_test_handler:1.8 + mov.l utlb_old_vbr_k, r01.9 + stc vbr, r11.10 + mov.l r1, @r01.11 +1.12 + mov.l utlb_vbr_k, r01.13 + ldc r0, vbr1.14 + rts1.15 + nop1.16 +1.17 +.global _uninstall_utlb_test_handler1.18 +_uninstall_utlb_test_handler:1.19 + mov.l utlb_old_vbr_k, r01.20 + mov.l @r0, r01.21 + ldc r0, vbr1.22 + rts1.23 + nop1.24 +1.25 +utlb_exc_handler:1.26 + mov.l utlb_exc_stack_k, r151.27 + mov.l r0, @-r151.28 + mov.l r1, @-r151.29 + mov.l r2, @-r151.30 + sts pr, r01.31 + mov.l r0, @-r151.32 +1.33 + mov.l mmu_expevt_k, r21.34 + mov.l @r2, r21.35 + mov r2, r01.36 + shlr2 r01.37 + cmp/eq #0x58, r01.38 + bt utlb_trap1.39 +1.40 + mov.l utlb_exc_k_1, r01.41 + mov.l @(16,r0), r11.42 + tst r1, r11.43 + bt utlb_exc_unexpected1.44 +1.45 + mov.l @r0, r11.46 + tst r1, r11.47 + bf utlb_exc_set1.48 + mov.l r2, @r01.49 + stc spc, r21.50 + mov.l r2, @(8,r0)1.51 +1.52 +utlb_exc_set:1.53 + mov.l @(4,r0), r21.54 + add #1, r21.55 + mov.l r2, @(4,r0)1.56 +1.57 + mov.l @(12,r0), r21.58 + stc spc, r11.59 + add r2, r11.60 + ldc r1, spc1.61 +1.62 +utlb_exc_done:1.63 + mov.l @r15+, r01.64 + lds r0, pr1.65 + mov.l @r15+, r21.66 + mov.l @r15+, r11.67 + mov.l @r15+, r01.68 + rte1.69 + stc sgr, r151.70 +1.71 +utlb_trap:1.72 + mov.l mmu_tra_k, r21.73 + mov.l @r2, r01.74 + shlr2 r01.75 + cmp/eq #42, r01.76 + bt utlb_trap_priv1.77 + cmp/eq #41, r01.78 + bt utlb_trap_printf1.79 + bra utlb_exc_done1.80 + nop1.81 +utlb_trap_priv:1.82 + stc ssr, r01.83 + mov.l mmu_sr_md, r11.84 + or r1, r01.85 + ldc r0, ssr1.86 + bra utlb_exc_done1.87 + nop1.88 +utlb_trap_printf:1.89 + stc sr, r01.90 + mov.l mmu_sr_rb_mask, r11.91 + and r1, r01.92 + ldc r0, sr1.93 + mov.l utlb_printf_k, r01.94 + jsr @r01.95 + nop1.96 + bra utlb_exc_done1.97 + nop1.98 +utlb_exc_unexpected: /* Report an unexpected exception. Save everything in case printf clobbers it */1.99 + mov.l r3, @-r151.100 + mov.l r4, @-r151.101 + mov.l r5, @-r151.102 + mov.l r6, @-r151.103 + mov.l r7, @-r151.104 + mov.l r8, @-r151.105 + mov.l r9, @-r151.106 + mov.l r10, @-r151.107 + mov.l r11, @-r151.108 + mov.l r12, @-r151.109 + mov.l r13, @-r151.110 + mov.l r14, @-r151.111 + sts fpscr, r01.112 + mov.l r0, @-r151.113 +1.114 + stc spc, r61.115 + mov r2, r51.116 + mov.l utlb_unexpected_msg_k, r41.117 + mov.l utlb_printf_k, r31.118 + jsr @r31.119 + nop1.120 +1.121 + mov.l @r15+, r01.122 + lds r0, fpscr1.123 + mov.l @r15+, r141.124 + mov.l @r15+, r131.125 + mov.l @r15+, r121.126 + mov.l @r15+, r111.127 + mov.l @r15+, r101.128 + mov.l @r15+, r91.129 + mov.l @r15+, r81.130 + mov.l @r15+, r71.131 + mov.l @r15+, r61.132 + mov.l @r15+, r51.133 + mov.l @r15+, r41.134 + mov.l @r15+, r31.135 + mov.l utlb_exc_k_1, r01.136 + bra utlb_exc_set1.137 + nop1.138 +1.139 +1.140 +.align 41.141 +utlb_vbr_k:1.142 + .long utlb_vbr1.143 +utlb_old_vbr_k:1.144 + .long utlb_old_vbr1.145 +utlb_exc_k_1:1.146 + .long utlb_exc1.147 +mmu_expevt_k:1.148 + .long 0xFF0000241.149 +mmu_tra_k:1.150 + .long 0xFF0000201.151 +mmu_sr_md:1.152 + .long 0x400000001.153 +mmu_sr_rb_mask:1.154 + .long 0x500000001.155 +utlb_exc_stack_k:1.156 + .long utlb_exc_stack1.157 +utlb_printf_k:1.158 + .long _printf1.159 +utlb_unexpected_msg_k:1.160 + .long utlb_unexpected_msg1.161 +1.162 + .skip 0x1F00 /* 8K stack */1.163 +utlb_vbr:1.164 + .skip 0x1001.165 +utlb_exc_stack:1.166 + mov.l utlb_exc_handler_k1, r151.167 + jmp @r151.168 + nop1.169 + nop1.170 +utlb_exc_handler_k1:1.171 + .long utlb_exc_handler1.172 +1.173 + .skip 0x2F41.174 + mov.l utlb_exc_handler_k2, r151.175 + jmp @r151.176 + nop1.177 + nop1.178 +utlb_exc_handler_k2:1.179 + .long utlb_exc_handler1.180 + .skip 0x1F41.181 + rte1.182 + stc sgr, r151.183 +1.184 +1.185 +utlb_expect_exc:1.186 + mova utlb_exc, r01.187 + xor r1, r11.188 + mov.l r1, @r01.189 + mov.l r1, @(4,r0)1.190 + mov.l r1, @(8,r0)1.191 + mov #1, r11.192 + mov.l r1, @(16,r0)1.193 + mov #2, r11.194 + mov.l r1, @(12,r0)1.195 + rts1.196 + nop1.197 +1.198 +utlb_noexpect_exc:1.199 + mova utlb_exc, r01.200 + xor r1, r11.201 + mov.l r1, @r01.202 + mov.l r1, @(4,r0)1.203 + mov.l r1, @(8,r0)1.204 + mov.l r1, @(16,r0)1.205 + mov #2, r11.206 + mov.l r1, @(12,r0)1.207 + rts1.208 + nop1.209 +1.210 +/* Check the result of a read test. Call with:1.211 + * r0 = expected spc1.212 + * r1 = value read (if any)1.213 + * r9 = (char *) testname1.214 + * r10 = test VMA1.215 + * r11 = test PMA1.216 + * r12 = expected exc1.217 + *1.218 + * Trashes r0..r71.219 + */1.220 +utlb_check_read_exc:1.221 + mov.l utlb_exc_k, r31.222 + mov.l addr_mask, r21.223 + and r2, r31.224 +1.225 + mov.l @r3, r21.226 + cmp/eq r2, r121.227 + bf test_read_exc_bad1.228 + tst r12, r121.229 + bt test_read_ok /* Expected no exception, and got none */1.230 + mov.l @(4,r3), r21.231 + dt r21.232 + bf test_read_count_bad1.233 + mov.l @(8,r3), r21.234 + cmp/eq r0, r21.235 + bt test_read_ok1.236 +test_read_pc_bad:1.237 + add #1, r141.238 + mov r0, r61.239 + mov.l err_read_pc_msg_k, r41.240 + mov r2, r71.241 + mov r9, r51.242 + trapa #411.243 + bra test_read_ok1.244 + nop1.245 +test_read_count_bad:1.246 + add #1, r141.247 + add #2, r21.248 + mov.l err_read_count_msg_k, r41.249 + mov r2, r61.250 + mov r9, r51.251 + trapa #411.252 + bra test_read_ok1.253 + nop1.254 +test_read_exc_bad:1.255 + add #1, r141.256 + mov.l err_read_exc_msg_k, r41.257 + mov r12, r61.258 + mov r2, r71.259 + mov r9, r51.260 + trapa #411.261 + bra test_read_ok1.262 + nop1.263 +test_read_ok:1.264 + bra utlb_expect_exc1.265 + nop1.266 +1.267 +/* Check the result of a write test (and clears the exception). Call with:1.268 + * r0 = expected spc1.269 + * r1 = written value1.270 + * r9 = (char *) testname1.271 + * r10 = test VMA1.272 + * r11 = test PMA1.273 + * r13 = expected exc1.274 + * r14 = fail count (updated)1.275 + *1.276 + * Trashes r0..r71.277 + */1.278 +utlb_check_write_exc:1.279 + mov.l utlb_exc_k, r31.280 + mov.l addr_mask, r21.281 + and r2, r31.282 +1.283 + mov.l @r3, r21.284 + cmp/eq r2, r131.285 + bf test_write_exc_bad1.286 + tst r13, r131.287 + bt test_write_ok /* Expected no exception, and got none */1.288 + mov.l @(4,r3), r21.289 + dt r21.290 + bf test_write_count_bad1.291 + mov.l @(8,r3), r21.292 + cmp/eq r0, r21.293 + bt test_write_ok1.294 +test_write_pc_bad:1.295 + add #1, r141.296 + mov r0, r61.297 + mov.l err_write_pc_msg_k, r41.298 + mov r2, r71.299 + mov r9, r51.300 + trapa #411.301 + bra test_write_ok1.302 + nop1.303 +test_write_count_bad:1.304 + add #1, r141.305 + add #1, r21.306 + mov.l err_write_count_msg_k, r41.307 + mov r2, r61.308 + mov r9, r51.309 + trapa #411.310 + bra test_write_ok1.311 + nop1.312 +test_write_exc_bad:1.313 + add #1, r141.314 + mov.l err_write_exc_msg_k, r41.315 + mov r13, r61.316 + mov r2, r71.317 + mov r9, r51.318 + trapa #411.319 + bra test_write_ok1.320 + nop1.321 +test_write_ok:1.322 + bra utlb_expect_exc1.323 + nop1.324 +.align 41.325 +utlb_exc_k:1.326 + .long utlb_exc1.327 +err_read_exc_msg_k:1.328 + .long err_read_exc_msg1.329 +err_read_count_msg_k:1.330 + .long err_read_count_msg1.331 +err_read_pc_msg_k:1.332 + .long err_read_pc_msg1.333 +err_write_exc_msg_k:1.334 + .long err_write_exc_msg1.335 +err_write_count_msg_k:1.336 + .long err_write_count_msg1.337 +err_write_pc_msg_k:1.338 + .long err_write_pc_msg1.339 +1.340 +.align 41.341 +utlb_old_vbr:1.342 + .long 01.343 +utlb_exc:1.344 + .long 01.345 +utlb_exc_count:1.346 + .long 01.347 +utlb_exc_spc:1.348 + .long 01.349 +utlb_rte_offset:1.350 + .long 21.351 +utlb_expected:1.352 + .long 01.353 +1.354 +.global _run_utlb_priv_test1.355 +_run_utlb_priv_test:1.356 + mov.l r14, @-r151.357 + sts pr, r01.358 + mov.l r0, @-r151.359 + mov.l r13, @-r151.360 + mov.l r12, @-r151.361 + mov.l r11, @-r151.362 + mov.l r10, @-r151.363 + mov.l r9, @-r151.364 + mov.l r8, @-r151.365 +1.366 + mov.l @(0,r4), r9 /* Test name */1.367 + mov.l @(4,r4), r10 /* Test VMA */1.368 + mov.l @(8,r4), r11 /* Test PMA */1.369 + mov.l @(12,r4), r12 /* Read exception */1.370 + mov.l @(16,r4), r13 /* Write exception */1.371 + xor r14, r14 /* Fail count */1.372 +1.373 + mov.l @r11, r0 /* Save original memory value */1.374 + ocbp @r111.375 + mov.l r0, @-r151.376 +1.377 + tst r12, r121.378 + bt utlb_read_test_noexc1.379 +1.380 +/* Exception test cases - all should fail with the same exception */1.381 +utlb_read_test_exc:1.382 + mov r10, r81.383 + bsr utlb_expect_exc1.384 + nop1.385 +1.386 +/* Test mov.l Rm, Rn */1.387 + mova test_readl_1, r01.388 +.align 41.389 +test_readl_1:1.390 + mov.l @r10, r11.391 + bsr utlb_check_read_exc1.392 + nop1.393 +1.394 +/* Test mov.l @Rm+, Rn */1.395 + mova test_readl_2, r01.396 +.align 41.397 +test_readl_2:1.398 + mov.l @r8+, r11.399 + bsr utlb_check_read_exc1.400 + nop1.401 + cmp/eq r8,r101.402 + bt test_readl_2_ok1.403 +1.404 + add #1, r141.405 + mov.l err_readlp_bad_msg_k, r41.406 + mov r9, r51.407 + trapa #411.408 +1.409 +test_readl_2_ok:1.410 +/* Test mov.w @Rm, Rn */1.411 + mova test_readw_1, r01.412 +.align 41.413 +test_readw_1:1.414 + mov.w @r10, r11.415 + bsr utlb_check_read_exc1.416 + nop1.417 +1.418 +/* Test mov.w @Rm+, Rn */1.419 + mova test_readw_2, r01.420 +.align 41.421 +test_readw_2:1.422 + mov.w @r8+, r11.423 + bsr utlb_check_read_exc1.424 + nop1.425 + cmp/eq r8, r101.426 + bt test_readw_2_ok1.427 +1.428 + add #1, r141.429 + mov.l err_readwp_bad_msg_k, r41.430 + mov r9, r51.431 + trapa #411.432 +1.433 +test_readw_2_ok:1.434 +1.435 +/* Test mov.b @Rm, Rn */1.436 + mova test_readb_1, r01.437 +.align 41.438 +test_readb_1:1.439 + mov.b @r10, r11.440 + bsr utlb_check_read_exc1.441 + nop1.442 +1.443 +/* Test mov.b @Rm+, Rn */1.444 + mova test_readb_2, r01.445 +.align 41.446 +test_readb_2:1.447 + mov.b @r8+, r11.448 + bsr utlb_check_read_exc1.449 + nop1.450 + cmp/eq r8, r101.451 + bt test_readb_2_ok1.452 +1.453 + add #1, r141.454 + mov.l err_readbp_bad_msg_k, r41.455 + mov r9, r51.456 + trapa #411.457 +1.458 +test_readb_2_ok:1.459 +1.460 + bra utlb_read_test_done1.461 + nop1.462 +1.463 +/* Non-exception read tests */1.464 +utlb_read_test_noexc:1.465 + mov.l utlb_exc_k_2, r81.466 + mov.l addr_mask, r01.467 + and r0, r81.468 + bsr utlb_noexpect_exc1.469 + nop1.470 +1.471 + mov.l @r10, r11.472 + not r1, r21.473 + mov.l r2, @r111.474 + ocbp @r111.475 + ocbi @r101.476 + mov.l @r10, r11.477 + ocbi @r101.478 + cmp/eq r1, r21.479 + bt noexc_readl_ok1.480 +1.481 +1.482 + add #1, r141.483 + mov.l err_read_mismatch_msg_k, r41.484 + mov r9, r51.485 + trapa #411.486 +1.487 +noexc_readl_ok:1.488 +1.489 + mov.l @(4,r8), r01.490 + add r0, r141.491 +utlb_read_test_done:1.492 +1.493 +/*********************** Begin write tests *****************************/1.494 + tst r13, r131.495 + bt utlb_write_test_noexc1.496 +1.497 +/* Exception write tests */1.498 +utlb_write_test_exc:1.499 + bsr utlb_expect_exc1.500 + nop1.501 +1.502 + mova test_writel_pc, r01.503 +.align 41.504 +test_writel_pc:1.505 + mov.l r1, @r101.506 + bsr utlb_check_write_exc1.507 + nop1.508 +1.509 + mova test_writelp_pc, r01.510 + mov r10, r81.511 +.align 41.512 +test_writelp_pc:1.513 + mov.l r1, @-r81.514 + bsr utlb_check_write_exc1.515 + nop1.516 + cmp/eq r8, r101.517 + bt test_writelp_ok1.518 + add #1, r141.519 + mov.l err_writelp_bad_msg_k, r41.520 + mov r9, r51.521 + trapa #411.522 +test_writelp_ok:1.523 +1.524 + mova test_writew_pc, r01.525 +.align 41.526 +test_writew_pc:1.527 + mov.w r1, @r101.528 + bsr utlb_check_write_exc1.529 + nop1.530 +1.531 + mova test_writewp_pc, r01.532 + mov r10, r81.533 +.align 41.534 +test_writewp_pc:1.535 + mov.w r1, @-r81.536 + bsr utlb_check_write_exc1.537 + nop1.538 + cmp/eq r8, r101.539 + bt test_writewp_ok1.540 + add #1, r141.541 + mov.l err_writewp_bad_msg_k, r41.542 + mov r9, r51.543 + trapa #411.544 +test_writewp_ok:1.545 +1.546 + mova test_writeb_pc, r01.547 +.align 41.548 +test_writeb_pc:1.549 + mov.b r1, @r101.550 + bsr utlb_check_write_exc1.551 + nop1.552 +1.553 + mova test_writebp_pc, r01.554 + mov r10, r81.555 +.align 41.556 +test_writebp_pc:1.557 + mov.b r1, @-r81.558 + bsr utlb_check_write_exc1.559 + nop1.560 + cmp/eq r8, r101.561 + bt test_writebp_ok1.562 + add #1, r141.563 + mov.l err_writelp_bad_msg_k, r41.564 + mov r9, r51.565 + trapa #411.566 +test_writebp_ok:1.567 +1.568 + bra utlb_write_test_done1.569 + nop1.570 +1.571 +/* Non-exception write tests */1.572 +utlb_write_test_noexc:1.573 + mov.l utlb_exc_k_2, r81.574 + mov.l addr_mask, r01.575 + and r0, r81.576 + bsr utlb_noexpect_exc1.577 + nop1.578 +1.579 + mov.l @r11, r71.580 + ocbp @r111.581 + not r7, r11.582 +1.583 + mov.l r1, @r101.584 + ocbp @r101.585 + mov.l @r11, r61.586 + cmp/eq r6, r11.587 + bt test_writel_1_ok1.588 +1.589 + add #1, r141.590 + mov.l err_write_ignored_msg_k, r41.591 + mov r9, r51.592 + trapa #411.593 +1.594 +test_writel_1_ok:1.595 +1.596 + mov.l @(4,r8), r01.597 + add r0, r141.598 +utlb_write_test_done:1.599 +1.600 + xor r0, r01.601 + mov.l r0, @(16,r8)1.602 +1.603 + mov.l @r15+, r01.604 + mov.l r0, @r111.605 + mov.l @r15+, r81.606 + mov.l @r15+, r91.607 + mov.l @r15+, r101.608 + mov.l @r15+, r111.609 + mov.l @r15+, r121.610 + mov.l @r15+, r131.611 + mov.l @r15+, r11.612 + lds r1, pr1.613 + mov r14, r01.614 + mov.l @r15+, r141.615 + rts1.616 + nop1.617 +1.618 +.align 41.619 +err_read_mismatch_msg_k:1.620 + .long err_read_mismatch_msg1.621 +err_write_ignored_msg_k:1.622 + .long err_write_ignored_msg1.623 +err_readlp_bad_msg_k:1.624 + .long err_readlp_bad_msg1.625 +err_readwp_bad_msg_k:1.626 + .long err_readwp_bad_msg1.627 +err_readbp_bad_msg_k:1.628 + .long err_readbp_bad_msg1.629 +err_writelp_bad_msg_k:1.630 + .long err_readlp_bad_msg1.631 +err_writewp_bad_msg_k:1.632 + .long err_readwp_bad_msg1.633 +err_writebp_bad_msg_k:1.634 + .long err_readbp_bad_msg1.635 +1.636 +1.637 +1.638 +.global _run_utlb_user_test1.639 +_run_utlb_user_test:1.640 + sts pr, r01.641 + mov.l r0, @-r151.642 + stc sr, r21.643 + mov.l sr_mask, r11.644 + and r1, r21.645 +1.646 + mova user_entry_point, r01.647 + mov.l addr_mask, r11.648 + and r1, r01.649 +1.650 + mov.l r15, @-r151.651 +1.652 + jmp @r01.653 + nop1.654 +1.655 +user_entry_point:1.656 + nop1.657 + ldc r2, sr1.658 +1.659 + /* In user mode */1.660 +1.661 + mov.l main_test_k, r01.662 + and r1, r01.663 + and r1, r41.664 + and r1, r151.665 + jsr @r01.666 + nop1.667 +1.668 + /* Done, return to priv mode */1.669 + trapa #421.670 + mov.l user_retaddr, r11.671 + jmp @r11.672 + nop1.673 +1.674 +user_exit_point:1.675 + /* Back to priv mode */1.676 + mov.l @r15+, r151.677 + mov.l @r15+, r11.678 + lds r1, pr1.679 + rts1.680 + nop1.681 +.align 41.682 +1.683 +utlb_exc_k_2:1.684 + .long utlb_exc1.685 +main_test_k:1.686 + .long _run_utlb_priv_test1.687 +addr_mask:1.688 + .long 0x1FFFFFFF1.689 +sr_mask:1.690 + .long 0x3FFFFFFF1.691 +user_retaddr:1.692 + .long user_exit_point1.693 +1.694 +err_read_exc_msg:1.695 + .string "%s: Read failed: Expected Exc %04X but got %04X\n"1.696 +err_read_count_msg:1.697 + .string "%s: Read bad exception: Exception 1 exception, but got %d\n"1.698 +err_read_pc_msg:1.699 + .string "%s: Read bad exception: Expected PC=%08X but was %08X\n"1.700 +err_read_mismatch_msg:1.701 + .string "%s: Read failed: Data mismatch!\n"1.702 +err_readlp_bad_msg:1.703 + .string "%s: Mov.l @Rm+, Rn failed: Rm changed!\n"1.704 +err_readwp_bad_msg:1.705 + .string "%s: Mov.w @Rm+, Rn failed: Rm changed!\n"1.706 +err_readbp_bad_msg:1.707 + .string "%s: Mov.b @Rm+, Rn failed: Rm changed!\n"1.708 +err_writelp_bad_msg:1.709 + .string "%s: Mov.l Rm, @-Rn failed: Rm changed!\n"1.710 +err_writewp_bad_msg:1.711 + .string "%s: Mov.w Rm, @-Rn failed: Rm changed!\n"1.712 +err_writebp_bad_msg:1.713 + .string "%s: Mov.b Rm, @-Rn failed: Rm changed!\n"1.714 +err_write_exc_msg:1.715 + .string "%s: Write failed: Expected Exc %04X but got %04X\n"1.716 +err_write_count_msg:1.717 + .string "%s: Write bad exception: Expected 1 exception, but got %d\n"1.718 +err_write_pc_msg:1.719 + .string "%s: Write bad exception: Expected PC=%08X but was %08X\n"1.720 +err_write_ignored_msg:1.721 + .string "%s: Write failed: write didn't happen!\n"1.722 +utlb_unexpected_msg:1.723 + .string "*** Unexpected exception %04X at %08X!\n"
.