tizen 2.4 release
[external/binutils.git] / sim / testsuite / sim / bfin / c_seq_ex3_ls_mmrj_mvp.S
1 //Original:/proj/frio/dv/testcases/core/c_seq_ex3_ls_mmrj_mvp/c_seq_ex3_ls_mmrj_mvp.dsp
2 // Spec Reference: sequencer stage ex3  (ldst + mmr + jump+ regmv + pushpopmultiple)
3 # mach: bfin
4 # sim: --environment operating
5
6 #include "test.h"
7 .include "testutils.inc"
8 start
9
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);
22
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
38
39 GEN_INT_INIT(ITABLE) // set location for interrupt table
40
41 //
42 // Reset/Bootstrap Code
43 //   (Here we should set the processor operating modes, initialize registers,
44 //
45
46 BOOT:
47
48                               // in reset mode now
49 LD32_LABEL(sp, KSTACK);   // setup the stack pointer
50 FP = SP;        // and frame pointer
51
52 LD32(p0, EVT);      // Setup Event Vectors and Handlers
53 LD32_LABEL(r0, EHANDLE);  // Emulation Handler (Int0)
54     [ P0 ++ ] = R0;
55
56 LD32_LABEL(r0, RHANDLE);  // Reset Handler (Int1)
57     [ P0 ++ ] = R0;
58
59 LD32_LABEL(r0, NHANDLE);  // NMI Handler (Int2)
60     [ P0 ++ ] = R0;
61
62 LD32_LABEL(r0, XHANDLE);  // Exception Handler (Int3)
63     [ P0 ++ ] = R0;
64
65     [ P0 ++ ] = R0;        // IVT4 not used
66
67 LD32_LABEL(r0, HWHANDLE); // HW Error Handler (Int5)
68     [ P0 ++ ] = R0;
69
70 LD32_LABEL(r0, THANDLE);  // Timer Handler (Int6)
71     [ P0 ++ ] = R0;
72
73 LD32_LABEL(r0, I7HANDLE); // IVG7 Handler
74     [ P0 ++ ] = R0;
75
76 LD32_LABEL(r0, I8HANDLE); // IVG8 Handler
77     [ P0 ++ ] = R0;
78
79 LD32_LABEL(r0, I9HANDLE); // IVG9 Handler
80     [ P0 ++ ] = R0;
81
82 LD32_LABEL(r0, I10HANDLE);// IVG10 Handler
83     [ P0 ++ ] = R0;
84
85 LD32_LABEL(r0, I11HANDLE);// IVG11 Handler
86     [ P0 ++ ] = R0;
87
88 LD32_LABEL(r0, I12HANDLE);// IVG12 Handler
89     [ P0 ++ ] = R0;
90
91 LD32_LABEL(r0, I13HANDLE);// IVG13 Handler
92     [ P0 ++ ] = R0;
93
94 LD32_LABEL(r0, I14HANDLE);// IVG14 Handler
95     [ P0 ++ ] = R0;
96
97 LD32_LABEL(r0, I15HANDLE);// IVG15 Handler
98     [ P0 ++ ] = R0;
99
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;
106
107 DUMMY:
108
109     R0 = 0 (Z);
110
111 LT0 = r0;       // set loop counters to something deterministic
112 LB0 = r0;
113 LC0 = r0;
114 LT1 = r0;
115 LB1 = r0;
116 LC1 = r0;
117
118 ASTAT = r0;     // reset other internal regs
119
120 // The following code sets up the test for running in USER mode
121
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
125
126 // Comment the following line for a USER Mode test
127
128 JUMP    STARTSUP;   // jump to code start for SUPERVISOR mode
129
130 RTI;
131
132 STARTSUP:
133 LD32_LABEL(p1, BEGIN);
134
135 LD32(p0, EVT15);
136     [ P0 ] = P1;   // IVG15 (General) handler (Int 15) load with start
137
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.
141
142 NOP;    // Workaround for Bug 217
143 RTI;
144
145 //
146 // The Main Program
147 //
148 STARTUSER:
149 LD32_LABEL(sp, USTACK);   // setup the stack pointer
150 FP = SP;            // set frame pointer
151 JUMP BEGIN;
152
153 //*********************************************************************
154
155 BEGIN:
156
157                 // COMMENT the following line for USER MODE tests
158     [ -- SP ] = RETI;  // enable interrupts in supervisor mode
159
160                 // **** YOUR CODE GOES HERE ****
161
162
163
164     // PUT YOUR TEST HERE!
165 // PUSH
166 LD32(p1, 0xFFE02034);       // wrt-rd     EVT13             = 0xFFE02034
167 //LD32(p2, DATA_ADDR_1);
168 loadsym p2, DATA;
169 LD32(p3, 0xab5fd490);
170 LD32(p4, 0xa581bd94);
171
172 LD32(r2, 0x14789232);
173     [ P1 ] = R2;
174 CSYNC;
175         R0 = 0x01;
176         R1 = 0x02;
177         R2 = 0x03;
178         R3 = 0x04;
179         R4 = 0x05;
180         R5 = 0x06;
181         R6 = 0x07;
182         R7 = 0x08;
183
184
185         [ -- SP ] = ( R7:0 );
186 //  RAISE 2;    // RTN
187     R0 = [ P2 ++ ];
188     R1 = [ P1 ];
189 JUMP.S LABEL1;
190     P3 = R7;
191     R4 = P3;
192         [ -- SP ] = ( R7:0 );
193         R1 = 0x12;
194         R2 = 0x13;
195         R3 = 0x14;
196         R4 = 0x15;
197         R5 = 0x16;
198         R6 = 0x17;
199         R7 = 0x18;
200
201 LABEL1:
202 //  RAISE 5;    // RTI
203     R2 = [ P2 ++ ];
204
205     P4 = R6;
206     R3 = P4;
207
208         [ -- SP ] = ( R7:0 );
209
210         R2 = 0x23;
211         R3 = 0x24;
212         R4 = 0x25;
213         R5 = 0x26;
214         R6 = 0x27;
215         R7 = 0x28;
216
217 // wrt-rd     EVT5              = 0xFFE02034
218 LD32(p1, 0xFFE02034);       // wrt-rd     EVT13             = 0xFFE02034
219 RAISE 6;    // RTI
220     R4 = [ P2 ++ ];
221     R5 = [ P1 ];
222 JUMP.S LABEL2;
223     P3 = R3;
224     R6 = P3;
225         [ -- SP ] = ( R7:0 );
226 // POP
227         R0 = 0x00;
228         R1 = 0x00;
229         R2 = 0x00;
230         R3 = 0x00;
231         R4 = 0x00;
232         R5 = 0x00;
233         R6 = 0x00;
234         R7 = 0x00;
235
236 LABEL2:
237 CSYNC;
238 CHECKREG(r0, 0x00010203);
239 CHECKREG(r1, 0x14789232);
240 CHECKREG(r2, 0x00000023);
241 CHECKREG(r3, 0x00000024);
242 CHECKREG(r4, 0x08090A0B);
243 CHECKREG(r5, 0x14789232);
244 CHECKREG(r6, 0x00000027);
245 //  RAISE 7;    // RTI
246     R0 = [ P2 ++ ];
247     R1 = [ P1 ];
248     P4 = R4;
249     R2 = P4;
250         ( R7:0 ) = [ SP ++ ];
251
252
253
254 CHECKREG(r0, 0x00010203);
255 CHECKREG(r1, 0x14789232);
256 CHECKREG(r2, 0x04050607);
257 CHECKREG(r3, 0x00000007);
258 CHECKREG(r4, 0x00000005);
259 CHECKREG(r5, 0x00000006);
260 CHECKREG(r6, 0x00000007);
261 CHECKREG(r7, 0x00000008);
262 // wrt-rd     EVT13             = 0xFFE02034
263 LD32(p1, 0xFFE02034);
264 //  RAISE 8;    // RTI
265     R0 = [ P2 ++ ];
266     R1 = [ P1 ];
267 JUMP.S LABEL3;
268     P1 = R5;
269     R6 = P1;
270         ( R7:0 ) = [ SP ++ ];
271 //CHECKREG(r0, 0x000000a1);  // CHECKREG can not be skipped
272 //CHECKREG(r1, 0x000000b2);  // so they cannot appear here
273 //CHECKREG(r2, 0x000000c3);
274 //CHECKREG(r3, 0x000000d4);
275 //CHECKREG(r4, 0x000000e5);
276 //CHECKREG(r5, 0x000000f6);
277 //CHECKREG(r6, 0x00000017);
278 //CHECKREG(r7, 0x00000028);
279    R0 = 12;
280    R1 = 13;
281    R2 = 14;
282    R3 = 15;
283    R4 = 16;
284    R5 = 17;
285    R6 = 18;
286    R7 = 19;
287
288
289 LABEL3:
290 CSYNC;
291 CHECKREG(r0, 0x10111213);
292 CHECKREG(r1, 0x14789232);
293 //  RAISE 9;    // RTI
294     P3 = R6;
295     R7 = P3;
296         ( R7:0 ) = [ SP ++ ];
297
298 CHECKREG(r0, 0x00000001);
299 CHECKREG(r1, 0x00000002);
300 CHECKREG(r2, 0x00000003);
301 CHECKREG(r3, 0x00000004);
302 CHECKREG(r4, 0x00000005);
303 CHECKREG(r5, 0x00000006);
304 CHECKREG(r6, 0x00000007);
305 CHECKREG(r7, 0x00000008);
306 R0 = I0;
307 R1 = I1;
308 R2 = I2;
309 R3 = I3;
310 CHECKREG(r0, 0x00000000);
311 CHECKREG(r1, 0x00000000);
312 CHECKREG(r2, 0x00000002);
313 CHECKREG(r3, 0x00000000);
314
315
316 END:
317 dbg_pass;            // End the test
318
319 //*********************************************************************
320
321 //
322 // Handlers for Events
323 //
324
325 EHANDLE:            // Emulation Handler 0
326 RTE;
327
328 RHANDLE:            // Reset Handler 1
329 RTI;
330
331 NHANDLE:            // NMI Handler 2
332     I0 += 2;
333 RTN;
334
335 XHANDLE:            // Exception Handler 3
336     R1 = 3;
337 RTX;
338
339 HWHANDLE:           // HW Error Handler 5
340     I1 += 2;
341 RTI;
342
343 THANDLE:            // Timer Handler 6
344     I2 += 2;
345 RTI;
346
347 I7HANDLE:           // IVG 7 Handler
348     I3 += 2;
349 RTI;
350
351 I8HANDLE:           // IVG 8 Handler
352     I0 += 2;
353 RTI;
354
355 I9HANDLE:           // IVG 9 Handler
356     I0 += 2;
357 RTI;
358
359 I10HANDLE:          // IVG 10 Handler
360     R7 = 10;
361 RTI;
362
363 I11HANDLE:          // IVG 11 Handler
364     I0 = R0;
365     I1 = R1;
366     I2 = R2;
367     I3 = R3;
368     M0 = R4;
369     R0 = 11;
370 RTI;
371
372 I12HANDLE:          // IVG 12 Handler
373     R1 = 12;
374 RTI;
375
376 I13HANDLE:          // IVG 13 Handler
377     R2 = 13;
378 RTI;
379
380 I14HANDLE:          // IVG 14 Handler
381     R3 = 14;
382 RTI;
383
384 I15HANDLE:          // IVG 15 Handler
385     R4 = 15;
386 RTI;
387
388 NOP;NOP;NOP;NOP;NOP;NOP;NOP; // needed for icache bug
389
390 //
391 // Data Segment
392 //
393
394 .section MEM_DATA_ADDR_1,"aw"
395 DATA:
396 //  .space (0x10);
397 .dd 0x00010203
398 .dd 0x04050607
399 .dd 0x08090A0B
400 .dd 0x0C0D0E0F
401 .dd 0x10111213
402 .dd 0x14151617
403 .dd 0x18191A1B
404 .dd 0x1C1D1E1F
405 .dd 0x11223344
406 .dd 0x55667788
407 .dd 0x99717273
408 .dd 0x74757677
409 .dd 0x82838485
410 .dd 0x86878889
411 .dd 0x80818283
412 .dd 0x84858687
413 .dd 0x01020304
414 .dd 0x05060708
415 .dd 0x09101112
416 .dd 0x14151617
417 .dd 0x18192021
418
419
420 // Stack Segments (Both Kernel and User)
421
422     .space (STACKSIZE);
423 KSTACK:
424
425     .space (STACKSIZE);
426 USTACK:
427
428 .section MEM_DATA_ADDR_2,"aw"
429 .dd 0x20212223
430 .dd 0x24252627
431 .dd 0x28292A2B
432 .dd 0x2C2D2E2F
433 .dd 0x30313233
434 .dd 0x34353637
435 .dd 0x38393A3B
436 .dd 0x3C3D3E3F
437 .dd 0x91929394
438 .dd 0x95969798
439 .dd 0x99A1A2A3
440 .dd 0xA5A6A7A8
441 .dd 0xA9B0B1B2
442 .dd 0xB3B4B5B6
443 .dd 0xB7B8B9C0