ld: Move the .note.build-id section to near the start of the memory map.
[binutils-gdb.git] / sim / testsuite / bfin / c_seq_ex3_ls_brcc_mvp.S
blobd64de59bd738efd7eb8cbcc443abd15f64fbfe11
1 //Original:/proj/frio/dv/testcases/core/c_seq_ex3_ls_brcc_mvp/c_seq_ex3_ls_brcc_mvp.dsp
2 // Spec Reference: sequencer stage ex3  (ldst + brcc + regmv + pushpopmultiple)
3 # mach: bfin
4 # sim: --environment operating
6 #include "test.h"
7 .include "testutils.inc"
8 start
10 include(std.inc)
11 include(selfcheck.inc)
12 include(gen_int.inc)
13 INIT_R_REGS(0);
14 INIT_P_REGS(0);
15 INIT_I_REGS(0);     // initialize the dsp address regs
16 INIT_M_REGS(0);
17 INIT_L_REGS(0);
18 INIT_B_REGS(0);
19 //CHECK_INIT(p5, 0xe0000000);
20 include(symtable.inc)
21 CHECK_INIT_DEF(p5);
23 #ifndef STACKSIZE
24 #define STACKSIZE 0x10
25 #endif
26 #ifndef EVT
27 #define EVT  0xFFE02000
28 #endif
29 #ifndef EVT15
30 #define EVT15  0xFFE0203C
31 #endif
32 #ifndef EVT_OVERRIDE
33 #define EVT_OVERRIDE 0xFFE02100
34 #endif
35 #ifndef ITABLE
36 #define ITABLE DATA_ADDR_1
37 #endif
39 GEN_INT_INIT(ITABLE) // set location for interrupt table
42 // Reset/Bootstrap Code
43 //   (Here we should set the processor operating modes, initialize registers,
46 BOOT:
48                               // in reset mode now
49 LD32_LABEL(sp, KSTACK);   // setup the stack pointer
50 FP = SP;        // and frame pointer
52 LD32(p0, EVT);      // Setup Event Vectors and Handlers
53 LD32_LABEL(r0, EHANDLE);  // Emulation Handler (Int0)
54     [ P0 ++ ] = R0;
56 LD32_LABEL(r0, RHANDLE);  // Reset Handler (Int1)
57     [ P0 ++ ] = R0;
59 LD32_LABEL(r0, NHANDLE);  // NMI Handler (Int2)
60     [ P0 ++ ] = R0;
62 LD32_LABEL(r0, XHANDLE);  // Exception Handler (Int3)
63     [ P0 ++ ] = R0;
65     [ P0 ++ ] = R0;        // IVT4 not used
67 LD32_LABEL(r0, HWHANDLE); // HW Error Handler (Int5)
68     [ P0 ++ ] = R0;
70 LD32_LABEL(r0, THANDLE);  // Timer Handler (Int6)
71     [ P0 ++ ] = R0;
73 LD32_LABEL(r0, I7HANDLE); // IVG7 Handler
74     [ P0 ++ ] = R0;
76 LD32_LABEL(r0, I8HANDLE); // IVG8 Handler
77     [ P0 ++ ] = R0;
79 LD32_LABEL(r0, I9HANDLE); // IVG9 Handler
80     [ P0 ++ ] = R0;
82 LD32_LABEL(r0, I10HANDLE);// IVG10 Handler
83     [ P0 ++ ] = R0;
85 LD32_LABEL(r0, I11HANDLE);// IVG11 Handler
86     [ P0 ++ ] = R0;
88 LD32_LABEL(r0, I12HANDLE);// IVG12 Handler
89     [ P0 ++ ] = R0;
91 LD32_LABEL(r0, I13HANDLE);// IVG13 Handler
92     [ P0 ++ ] = R0;
94 LD32_LABEL(r0, I14HANDLE);// IVG14 Handler
95     [ P0 ++ ] = R0;
97 LD32_LABEL(r0, I15HANDLE);// IVG15 Handler
98     [ P0 ++ ] = R0;
100 LD32(p0, EVT_OVERRIDE);
101     R0 = 0;
102     [ P0 ++ ] = R0;
103     R0 = -1;     // Change this to mask interrupts (*)
104     [ P0 ] = R0;   // IMASK
105 CSYNC;
107 DUMMY:
109     R0 = 0 (Z);
111 LT0 = r0;       // set loop counters to something deterministic
112 LB0 = r0;
113 LC0 = r0;
114 LT1 = r0;
115 LB1 = r0;
116 LC1 = r0;
118 ASTAT = r0;     // reset other internal regs
120 // The following code sets up the test for running in USER mode
122 LD32_LABEL(r0, STARTUSER);// One gets to user mode by doing a
123                         // ReturnFromInterrupt (RTI)
124 RETI = r0;      // We need to load the return address
126 // Comment the following line for a USER Mode test
128 JUMP    STARTSUP;   // jump to code start for SUPERVISOR mode
130 RTI;
132 STARTSUP:
133 LD32_LABEL(p1, BEGIN);
135 LD32(p0, EVT15);
136     [ P0 ] = P1;   // IVG15 (General) handler (Int 15) load with start
138 RAISE 15;   // after we RTI, INT 15 should be taken,& return to BEGIN in
139                 // SUPERVISOR MODE & go to different RAISE in supervisor mode
140                 // until the end of the test.
142 NOP;    // Workaround for Bug 217
143 RTI;
146 // The Main Program
148 STARTUSER:
149 LD32_LABEL(sp, USTACK);   // setup the stack pointer
150 FP = SP;            // set frame pointer
151 JUMP BEGIN;
153 //*********************************************************************
155 BEGIN:
157                 // COMMENT the following line for USER MODE tests
158     [ -- SP ] = RETI;  // enable interrupts in supervisor mode
160                 // **** YOUR CODE GOES HERE ****
161 R0 = 0;
162 ASTAT = R0;
163     // PUT YOUR TEST HERE!
164 // PUSH
165         R0 = 0x01;
166         R1 = 0x02;
167         R2 = 0x03;
168         R3 = 0x04;
169         R4 = 0x05;
170         R5 = 0x06;
171         R6 = 0x07;
172         R7 = 0x08;
173 LD32(p3, 0xab5fd490);
174 LD32(p4, 0xa581bd94);
177         [ -- SP ] = ( R7:0 );
178 LD32(p1, 0xFFE02034);       // wrt-rd     EVT13             = 0xFFE02034
179 //LD32(p2, DATA_ADDR_1);
180 loadsym p2, DATA;
181 LD32(r0, 0x55552345);
182 //  RAISE 2;    // RTN
183 //  r0 = [p2++];
184     R1 = [ P1 ];
185 IF !CC JUMP LABEL1 (BP);
187     P3 = R7;
188     R4 = P3;
189         [ -- SP ] = ( R7:0 );
190         R1 = 0x12;
191         R2 = 0x13;
192         R3 = 0x14;
193         R4 = 0x15;
194         R5 = 0x16;
195         R6 = 0x17;
196         R7 = 0x18;
198 LABEL1:
199 //  RAISE 5;    // RTI
200 //  r2 = [p2++];
201     R3 = [ P1 ];
202 IF CC JUMP LABEL2 (BP);    // not taken
204     P4 = R6;
205     R4 = P4;
206         [ -- SP ] = ( R7:0 );
208         R2 = 0x23;
209         R3 = 0x24;
210         R4 = 0x25;
211         R5 = 0x26;
212         R6 = 0x27;
213         R7 = 0x28;
215 // wrt-rd     EVT5              = 0xFFE02034
216 LD32(p1, 0xFFE02034);       // wrt-rd     EVT13             = 0xFFE02034
217 //  RAISE 6;    // RTI
218 //  r4 = [p2++];
219     R5 = [ P1 ];
220 IF !CC JUMP LABEL2 (BP);
221     P3 = R3;
222     R6 = P3;
223         [ -- SP ] = ( R7:0 );
224 // POP
225         R0 = 0x00;
226         R1 = 0x00;
227         R2 = 0x00;
228         R3 = 0x00;
229         R4 = 0x00;
230         R5 = 0x00;
231         R6 = 0x00;
232         R7 = 0x00;
234 LABEL2:
235 CSYNC;
236 CHECKREG(r0, 0x55552345);
237 //CHECKREG(r1, 0x000002B8);
238 CHECKREG(r2, 0x00000023);
239 CHECKREG(r3, 0x00000024);
240 CHECKREG(r4, 0x00000025);
241 //CHECKREG(r5, 0x000002B8);
242 //  RAISE 7;    // RTI
243 //  r0 = [p2++];
244     R1 = [ P1 ];
245     P4 = R4;
246     R2 = P4;
247         ( R7:0 ) = [ SP ++ ];
251 CHECKREG(r0, 0x55552345);
252 //CHECKREG(r1, 0x000002B8);
253 CHECKREG(r2, 0x00000003);
254 //CHECKREG(r3, 0x000002B8);
255 CHECKREG(r4, 0x00000007);
256 CHECKREG(r5, 0x00000006);
257 CHECKREG(r6, 0x00000007);
258 CHECKREG(r7, 0x00000008);
259 // wrt-rd     EVT13             = 0xFFE02034
260 LD32(p1, 0xFFE02034);
261 //  RAISE 8;    // RTI
262 //  r0 = [p2++];
263     R1 = [ P1 ];
264 IF !CC JUMP LABEL3;
265     P1 = R5;
266     R6 = P1;
267         ( R7:0 ) = [ SP ++ ];
268 //CHECKREG(r0, 0x000000a1);  // CHECKREG can not be skipped
269 //CHECKREG(r1, 0x000000b2);  // so they cannot appear here
270 //CHECKREG(r2, 0x000000c3);
271 //CHECKREG(r3, 0x000000d4);
272 //CHECKREG(r4, 0x000000e5);
273 //CHECKREG(r5, 0x000000f6);
274 //CHECKREG(r6, 0x00000017);
275 //CHECKREG(r7, 0x00000028);
276    R0 = 12;
277    R1 = 13;
278    R2 = 14;
279    R3 = 15;
280    R4 = 16;
281    R5 = 17;
282    R6 = 18;
283    R7 = 19;
286 LABEL3:
287 CSYNC;
288 CHECKREG(r0, 0x55552345);
289 //CHECKREG(r1, 0x000002B8);
290 //  RAISE 9;    // RTI
291     P3 = R6;
292     R7 = P3;
293         ( R7:0 ) = [ SP ++ ];
295 CHECKREG(r0, 0x00000001);
296 CHECKREG(r1, 0x00000002);
297 CHECKREG(r2, 0x00000003);
298 CHECKREG(r3, 0x00000004);
299 CHECKREG(r4, 0x00000005);
300 CHECKREG(r5, 0x00000006);
301 CHECKREG(r6, 0x00000007);
302 CHECKREG(r7, 0x00000008);
303 R0 = I0;
304 R1 = I1;
305 R2 = I2;
306 R3 = I3;
307 CHECKREG(r0, 0x00000000);
308 CHECKREG(r1, 0x00000000);
309 CHECKREG(r2, 0x00000000);
310 CHECKREG(r3, 0x00000000);
313 END:
314 dbg_pass;            // End the test
316 //*********************************************************************
319 // Handlers for Events
322 EHANDLE:            // Emulation Handler 0
323 RTE;
325 RHANDLE:            // Reset Handler 1
326 RTI;
328 NHANDLE:            // NMI Handler 2
329     I0 += 2;
330 RTN;
332 XHANDLE:            // Exception Handler 3
333     R1 = 3;
334 RTX;
336 HWHANDLE:           // HW Error Handler 5
337     I1 += 2;
338 RTI;
340 THANDLE:            // Timer Handler 6
341     I2 += 2;
342 RTI;
344 I7HANDLE:           // IVG 7 Handler
345     I3 += 2;
346 RTI;
348 I8HANDLE:           // IVG 8 Handler
349     I0 += 2;
350 RTI;
352 I9HANDLE:           // IVG 9 Handler
353     I0 += 2;
354 RTI;
356 I10HANDLE:          // IVG 10 Handler
357     R7 = 10;
358 RTI;
360 I11HANDLE:          // IVG 11 Handler
361     I0 = R0;
362     I1 = R1;
363     I2 = R2;
364     I3 = R3;
365     M0 = R4;
366     R0 = 11;
367 RTI;
369 I12HANDLE:          // IVG 12 Handler
370     R1 = 12;
371 RTI;
373 I13HANDLE:          // IVG 13 Handler
374     R2 = 13;
375 RTI;
377 I14HANDLE:          // IVG 14 Handler
378     R3 = 14;
379 RTI;
381 I15HANDLE:          // IVG 15 Handler
382     R4 = 15;
383 RTI;
385 NOP;NOP;NOP;NOP;NOP;NOP;NOP; // needed for icache bug
388 // Data Segment
391 .section MEM_DATA_ADDR_1,"aw"
392 DATA:
393 //  .space (0x10);
394 .dd 0x00010203
395 .dd 0x04050607
396 .dd 0x08090A0B
397 .dd 0x0C0D0E0F
398 .dd 0x10111213
399 .dd 0x14151617
400 .dd 0x18191A1B
401 .dd 0x1C1D1E1F
402 .dd 0x11223344
403 .dd 0x55667788
404 .dd 0x99717273
405 .dd 0x74757677
406 .dd 0x82838485
407 .dd 0x86878889
408 .dd 0x80818283
409 .dd 0x84858687
410 .dd 0x01020304
411 .dd 0x05060708
412 .dd 0x09101112
413 .dd 0x14151617
414 .dd 0x18192021
417 // Stack Segments (Both Kernel and User)
419     .space (STACKSIZE);
420 KSTACK:
422     .space (STACKSIZE);
423 USTACK:
425 .section MEM_DATA_ADDR_2,"aw"
426 .dd 0x20212223
427 .dd 0x24252627
428 .dd 0x28292A2B
429 .dd 0x2C2D2E2F
430 .dd 0x30313233
431 .dd 0x34353637
432 .dd 0x38393A3B
433 .dd 0x3C3D3E3F
434 .dd 0x91929394
435 .dd 0x95969798
436 .dd 0x99A1A2A3
437 .dd 0xA5A6A7A8
438 .dd 0xA9B0B1B2
439 .dd 0xB3B4B5B6
440 .dd 0xB7B8B9C0