BUGFIX - CPI off by a factor of 10 X
[yari.git] / testcases / testeret.S
blob1af00844e8783e048b629cb64cf0c3e2e5070eab
1 /*
2  * Coprocessor 0 register names
3  */
4 #define CP0_INDEX $0
5 #define CP0_RANDOM $1
6 #define CP0_ENTRYLO0 $2
7 #define CP0_ENTRYLO1 $3
8 #define CP0_CONF $3
9 #define CP0_CONTEXT $4
10 #define CP0_PAGEMASK $5
11 #define CP0_WIRED $6
12 #define CP0_INFO $7
13 #define CP0_BADVADDR $8
14 #define CP0_COUNT $9
15 #define CP0_ENTRYHI $10
16 #define CP0_COMPARE $11
17 #define CP0_STATUS $12
18 #define CP0_CAUSE $13
19 #define CP0_EPC $14
20 #define CP0_PRID $15
21 #define CP0_CONFIG $16
22 #define CP0_LLADDR $17
23 #define CP0_WATCHLO $18
24 #define CP0_WATCHHI $19
25 #define CP0_XCONTEXT $20
26 #define CP0_FRAMEMASK $21
27 #define CP0_DIAGNOSTIC $22
28 #define CP0_DEBUG $23
29 #define CP0_DEPC $24
30 #define CP0_PERFORMANCE $25
31 #define CP0_ECC $26
32 #define CP0_CACHEERR $27
33 #define CP0_TAGLO $28
34 #define CP0_TAGHI $29
35 #define CP0_ERROREPC $30
36 #define CP0_DESAVE $31
38 #define t0 $3
41  * Test the eret instructions
42  */
44 #define SRAM 0x40000000
46 #define FAILURE la $2, .; mtlo $2; .word 0x48000000; 99: b 99b; nop
47 #define SUCCESS li $2, 0x87654321; mtlo $2; .word 0x48000000
48 #define EXPECT(r, v) li $30, v; beq $30,r,13f;nop;FAILURE;13:
49 #define EXPECT_ADDR(r, a) la $30, a; beq $30,r,13f;nop;FAILURE;13:
50         .text
51         .global _start
52         .ent    _start
53 _start:
54         .set noreorder
56         /* Test EPC return.  Set ERL=1 and ErrorPC = good1. */
57         mfc0    t0,CP0_STATUS
58         ori     t0,0x1f
59         xori    t0,0x1b         /* Lower 5 bits are KSU:2, ERL, EXL, and IE. */
60         mtc0    t0,CP0_STATUS
61         la      t0,good1
62         mtc0    t0,CP0_ERROREPC
63         la      t0,fail1
64         mtc0    t0,CP0_EPC
66         li      $6, 23
67         .set    mips3
68         eret
69         .set    mips0
70         li      $6, 27
71         li      $6, 27
73 good1:  EXPECT($6, 23)
75         /* Test ErrorPC return.  Set ERL=0 and EPC = good2. */
76         mfc0    t0,CP0_STATUS
77         ori     t0,0x1f
78         xori    t0,0x1f
79         mtc0    t0,CP0_STATUS
80         la      t0,fail2
81         mtc0    t0,CP0_ERROREPC
82         la      t0,good2
83         mtc0    t0,CP0_EPC
85         li      $6, 23
86         .set    mips3
87         eret
88         .set    mips0
89         li      $6, 27
90         li      $6, 27
92 good2:  EXPECT($6, 23)
93         SUCCESS
95 fail1:  FAILURE
96         nop
97         nop
98 fail2:  FAILURE
99         .end    _start