nkeynes@233 | 1 | .section .text
|
nkeynes@233 | 2 | .include "sh4/inc.s"
|
nkeynes@233 | 3 | !
|
nkeynes@233 | 4 | ! Test for undefined/unknown instructions. The only "official"
|
nkeynes@233 | 5 | ! undefined instruction is 0xFFFD, but this tests everything
|
nkeynes@233 | 6 | ! that doesn't match a known instruction pattern. Undefined
|
nkeynes@233 | 7 | ! instructions are expected to raise general-illegal when not
|
nkeynes@233 | 8 | ! in a delay slot, and slot-illegal when in a delay slot.
|
nkeynes@233 | 9 |
|
nkeynes@233 | 10 | .global _test_undefined
|
nkeynes@233 | 11 | _test_undefined:
|
nkeynes@233 | 12 | start_test
|
nkeynes@233 | 13 |
|
nkeynes@233 | 14 | test_undef_1: ! First the official one
|
nkeynes@233 | 15 | add #1, r12
|
nkeynes@233 | 16 | expect_exc 0x00000180
|
nkeynes@233 | 17 | test_undef_1_pc:
|
nkeynes@233 | 18 | .word 0xFFFD
|
nkeynes@233 | 19 | assert_exc_caught test_undef_str_k test_undef_1_pc
|
nkeynes@233 | 20 |
|
nkeynes@358 | 21 | test_undef_1a: ! 0xFFFD with FPU disabled - should still be an 0x180
|
nkeynes@358 | 22 | add #1, r12
|
nkeynes@358 | 23 | stc sr, r0
|
nkeynes@358 | 24 | xor r1, r1
|
nkeynes@358 | 25 | add #32, r1
|
nkeynes@358 | 26 | shll2 r1
|
nkeynes@358 | 27 | shll8 r1
|
nkeynes@358 | 28 | or r0, r1
|
nkeynes@358 | 29 | ldc r1, sr
|
nkeynes@358 | 30 | expect_exc 0x00000180
|
nkeynes@358 | 31 | test_undef_1a_pc:
|
nkeynes@358 | 32 | .word 0xFFFD
|
nkeynes@358 | 33 | assert_exc_caught test_undef_str_k test_undef_1a_pc
|
nkeynes@358 | 34 | stc sr, r0
|
nkeynes@358 | 35 | xor r1, r1
|
nkeynes@358 | 36 | add #32, r1
|
nkeynes@358 | 37 | shll2 r1
|
nkeynes@358 | 38 | shll8 r1
|
nkeynes@358 | 39 | not r1, r1
|
nkeynes@358 | 40 | and r0, r1
|
nkeynes@358 | 41 | ldc r1, sr
|
nkeynes@358 | 42 |
|
nkeynes@233 | 43 | ! Gaps in the STC range (0x0nn2)
|
nkeynes@233 | 44 | test_undef_2: ! 0x52
|
nkeynes@233 | 45 | add #1, r12
|
nkeynes@233 | 46 | expect_exc 0x00000180
|
nkeynes@233 | 47 | test_undef_2_pc:
|
nkeynes@233 | 48 | .word 0x0052
|
nkeynes@233 | 49 | assert_exc_caught test_undef_str_k test_undef_2_pc
|
nkeynes@233 | 50 |
|
nkeynes@233 | 51 | test_undef_3: ! 0x62
|
nkeynes@233 | 52 | add #1, r12
|
nkeynes@233 | 53 | expect_exc 0x00000180
|
nkeynes@233 | 54 | test_undef_3_pc:
|
nkeynes@233 | 55 | .word 0x0062
|
nkeynes@233 | 56 | assert_exc_caught test_undef_str_k test_undef_3_pc
|
nkeynes@233 | 57 |
|
nkeynes@233 | 58 | test_undef_4: ! 0x72
|
nkeynes@233 | 59 | add #1, r12
|
nkeynes@233 | 60 | expect_exc 0x00000180
|
nkeynes@233 | 61 | test_undef_4_pc:
|
nkeynes@233 | 62 | .word 0x0072
|
nkeynes@233 | 63 | assert_exc_caught test_undef_str_k test_undef_4_pc
|
nkeynes@233 | 64 |
|
nkeynes@233 | 65 | ! Test undefined FP instructions w/ and w/o FP disable
|
nkeynes@233 | 66 | test_undef_fpu_1:
|
nkeynes@233 | 67 | add #1, r12
|
nkeynes@233 | 68 | expect_exc 0x00000180
|
nkeynes@233 | 69 | test_undef_fpu_1_pc:
|
nkeynes@233 | 70 | .word 0xF0CD
|
nkeynes@233 | 71 | assert_exc_caught test_undef_str_k test_undef_fpu_1_pc
|
nkeynes@233 | 72 |
|
nkeynes@233 | 73 | test_undef_end:
|
nkeynes@233 | 74 | end_test test_undef_str_k
|
nkeynes@233 | 75 |
|
nkeynes@233 | 76 | test_undef_str_k:
|
nkeynes@233 | 77 | .long test_undef_str
|
nkeynes@233 | 78 | test_undef_str:
|
nkeynes@233 | 79 | .string "UNDEFINED-INSTRUCTION"
|