ld: Move the .note.build-id section to near the start of the memory map.
[binutils-gdb.git] / sim / testsuite / bfin / hwloop-bits.S
blob76d90039a10c4ae328b13d6a5e8b9bddf84e7ff6
1 # Blackfin testcase for HW Loops and user->super transitions
2 # mach: bfin
3 # sim: --environment operating
5 #include "test.h"
6         .include "testutils.inc"
8         .macro check_hwloop_regs lc:req, lt:req, lb:req
9         R0 = LC0;
10         CC = R0 == \lc;
11         IF !CC JUMP fail;
13         R0 = LT0;
14         CC = R0 == \lt;
15         IF !CC JUMP fail;
17         R0 = LB0;
18         CC = R0 == \lb;
19         IF !CC JUMP fail;
21         R0 = LC1;
22         CC = R0 == \lc;
23         IF !CC JUMP fail;
25         R0 = LT1;
26         CC = R0 == \lt;
27         IF !CC JUMP fail;
29         R0 = LB1;
30         CC = R0 == \lb;
31         IF !CC JUMP fail;
32         .endm
34         start
36         imm32 P0, EVT3;
37         loadsym R0, exception;
38         [P0] = R0;
40         imm32 P0, EVT2;
41         loadsym R0, nmi;
42         [P0] = R0;
44         loadsym R0, usermode;
45         RETI = R0;
47         # Set the LC/LB/LT up with LSB set
48         #  - Hardware clears LT LSB, but LB remains until we lower
49         imm32 R6, 0xaaaa5555
50         R4 = R6;
51         BITCLR (R4, 0);
52         imm32 R7, 0xaa55aa55
53         R5 = R7;
54         BITCLR (R5, 0);
56         LC0 = R6;
57         LT0 = R6;
58         LB0 = R7;
59         LC1 = R6;
60         LT1 = R6;
61         LB1 = R7;
63         # Sanity check
64         check_hwloop_regs R6, R4, R7
66         RTI;
68 usermode:
69         # Make sure LSB has been cleared in LB
70         check_hwloop_regs R6, R4, R5
72         # Clear LSB in all LC/LT/LB
73         LC0 = R4;
74         LT0 = R4;
75         LB0 = R5;
76         LC1 = R4;
77         LT1 = R4;
78         LB1 = R5;
80         # Now move back up to supervisor
81         EXCPT 4;
83 exception:
84         # Make sure LSB is set in LB
85         check_hwloop_regs R4, R4, R7
87         # Clear the LSB and move up another supervisor level
88         LC0 = R4;
89         LT0 = R4;
90         LB0 = R5;
91         LC1 = R4;
92         LT1 = R4;
93         LB1 = R5;
95         RAISE 2;
97 nmi:
98         # Make sure LSB stayed clear
99         check_hwloop_regs R4, R4, R5
101         dbg_pass
103 fail:
104         dbg_fail