Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / ifu / ifu_basic_branch.s
CommitLineData
86530b38
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: ifu_basic_branch.s
5* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
6* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
7*
8* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9*
10* This program is free software; you can redistribute it and/or modify
11* it under the terms of the GNU General Public License as published by
12* the Free Software Foundation; version 2 of the License.
13*
14* This program is distributed in the hope that it will be useful,
15* but WITHOUT ANY WARRANTY; without even the implied warranty of
16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17* GNU General Public License for more details.
18*
19* You should have received a copy of the GNU General Public License
20* along with this program; if not, write to the Free Software
21* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*
23* For the avoidance of doubt, and except that if any non-GPL license
24* choice is available it will apply instead, Sun elects to use only
25* the General Public License version 2 (GPLv2) at this time for any
26* software where a choice of GPL license versions is made
27* available with the language indicating that GPLv2 or any later version
28* may be used, or where a choice of which version of the GPL is applied is
29* otherwise unspecified.
30*
31* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
32* CA 95054 USA or visit www.sun.com if you need additional information or
33* have any questions.
34*
35*
36* ========== Copyright Header End ============================================
37*/
38#include "defines.h"
39#include "old_boot.s"
40
41!SECTION .MAIN TEXT_VA = 0xfffffffff0000000
42!attr_text {
43! Name=.MAIN,
44! hypervisor
45!}
46
47.text
48.global main
49
50main:
51
52 ! 1st fetch should be from RSTVaddr+0x20
53
54 illtrap
55 illtrap
56 illtrap
57 illtrap
58 illtrap
59 illtrap
60 illtrap
61 illtrap
62
63 ! First intsruction fetched should be from here RSTVaddr+0x20
64
65 ! First set up some registers with values ..
66
67 setx 0x524e4f2c0e9a829e, %g1, %g2
68 setx 0x21f892f023188c4b, %g1, %g3
69 setx 0x0b2a330b797f1524, %g1, %g4
70
71 setx 0xfffffffff0000000, %g1, %g5
72 setx 0x454f5c220664cd3c, %g1, %g6
73 setx 0x5d7085ae11898343, %g1, %g7
74
75 ! Now do some useful stuff ..
76start:
77 add %g1, %g2, %g2
78 add %g2, %g3, %g3
79 add %g3, %g4, %g4
80 add %g4, %g5, %g6
81 add %g5, %g6, %g7
82 add %g6, %g7, %g1
83 bpos,a start
84 addcc %g0, 0x1fff, %g1
85
86 xor %g2, %g6, %g1
87
88 inc %g6
89 cmp %g5, %g6 ;
90 cmp %g3, 0x1
91
92 setx 0x524e4f2c0e9a829e, %g1, %g2
93 setx 0x21f892f023188c4b, %g1, %g3
94 setx 0x0b2a330b797f1524, %g1, %g4
95
96 setx 0xfffffffff0000000, %g1, %g5
97 setx 0x454f5c220664cd3c, %g1, %g6
98 setx 0x5d7085ae11898343, %g1, %g7
99
100 ! Now do some useful stuff ..
101
102 bpos,a t2
103 bpos,a t4
104 inc %g2
105 b goodbye
106
107
108t2:
109 bpos,a t3
110 inc %g3
111 b goodbye
112
113
114t3:
115 bneg,a goodbye
116 inc %g4
117 b goodbye
118
119
120t4:
121 bpos,a t5
122 inc %g5
123 b goodbye
124
125
126t5:
127 bneg,a goodbye
128 inc %g6
129 xor %g2, %g6, %g1
130
131 cmp %g5, %g6 ;
132 cmp %g3, 0x1
133
134
135 setx 0x524e4f2c0e9a829e, %g1, %g2
136 setx 0x21f892f023188c4b, %g1, %g3
137 setx 0x0b2a330b797f1524, %g1, %g4
138
139 setx 0xfffffffff0000000, %g1, %g5
140 setx 0x454f5c220664cd3c, %g1, %g6
141 setx 0x5d7085ae11898343, %g1, %g7
142
143 ! Now do some useful stuff ..
144
145 bpos r2
146 bpos r4
147 inc %g2
148 b goodbye
149
150
151r2:
152 bpos r3
153 inc %g3
154 b goodbye
155
156
157r3:
158 bneg goodbye
159 inc %g4
160 b goodbye
161
162
163r4:
164 bpos r5
165 inc %g5
166 b goodbye
167
168
169r5:
170 bneg goodbye
171 inc %g6
172 xor %g2, %g6, %g1
173
174 cmp %g5, %g6 ;
175 cmp %g3, 0x1
176
177 !# Initialize registers ..
178
179 !# Global registers
180 set 0x0, %g1
181 set 0x4, %g2
182 set 0x0, %g7
183 !# Input registers
184 set -0x4, %i0
185 !# Local registers
186 set 0x6BC97FF6, %l0
187
188 !# Execute some ALU ops ..
189 brz %g1, b1
190 nop
191 inc %g7
192b1: brlez %i0, b2
193 nop
194 inc %g7
195b2: brlez %g1, b3
196 nop
197 inc %g7
198b3: brlz %i0, b4
199 nop
200 inc %g7
201b4: brnz %g2, b5
202 nop
203 inc %g7
204b5: brnz %i0, b6
205 nop
206 inc %g7
207b6: brgz %g2, b7
208 nop
209 inc %g7
210b7: brgez %g2, b8
211 nop
212 inc %g7
213b8: brgez %g1, b9
214 nop
215 inc %g7
216b9: brz %g7, not_taken_cases
217 nop
218back_br:
219 dec %g7
220 dec %g7
221! brz %g7, good_trap
222 brz %g7, my_pass
223 nop
224 EXIT_BAD
225
226not_taken_cases:
227 set 0x8, %g7
228 brz %g2, b10
229 nop
230 dec %g7
231b10: brlez %g2, b11
232 nop
233 dec %g7
234b11: brlz %g1, b12
235 nop
236 dec %g7
237b12: brlz %g2, b13
238 nop
239 dec %g7
240b13: brnz %g1, b14
241 nop
242 dec %g7
243b14: brgz %i0, b15
244 nop
245 dec %g7
246b15: brgz %g1, b16
247 nop
248 dec %g7
249b16: brgez %i0, b17
250 nop
251 dec %g7
252b17:
253 nop
254 nop
255 nop
256 nop
257 nop
258 nop
259 brz %g7, back_br
260 set 0x2, %g7
261 nop
262 nop
263
264 add %g0, 0x0000, %g1
265 add %g0, 0x0000, %g2
266 add %g0, 0x0000, %g3
267 add %g0, 0x0000, %g4
268 add %g0, 0x0000, %g5
269 add %g0, 0x0000, %g6
270 add %g0, 0x0000, %g7
271 addcc %g0, 0x0000, %g7
272B0: addcc %g0, 0x0001, %g2
273 ba B1
274 addcc %g0, 0x1fff, %g1
275 inc %g7
276B1: addcc %g0, 0x0001, %g2
277 bne B2
278 addcc %g0, 0x1fff, %g1
279 inc %g7
280B2: addcc %g0, 0x0000, %g2
281 be B3
282 addcc %g0, 0x1fff, %g1
283 inc %g7
284B3: addcc %g0, 0x0001, %g2
285 bg B4
286 addcc %g0, 0x1fff, %g1
287 inc %g7
288B4: addcc %g0, 0x0000, %g2
289 dec %g2
290 ble B5
291 addcc %g0, 0x1fff, %g1
292 inc %g7
293B5: addcc %g0, 0x0001, %g2
294 bge B6
295 addcc %g0, 0x1fff, %g1
296 inc %g7
297B6: addcc %g0, 0x0000, %g2
298 bge B7
299 addcc %g0, 0x1fff, %g1
300 inc %g7
301B7: addcc %g0, 0x0000, %g2
302 dec %g2
303 bl B8
304 addcc %g0, 0x1fff, %g1
305 inc %g7
306B8: addcc %g0, 0x0001, %g2
307 bgu B9
308 addcc %g0, 0x1fff, %g1
309 inc %g7
310B9: addcc %g0, 0x0000, %g2
311 bleu B10
312 addcc %g0, 0x1fff, %g1
313 inc %g7
314B10: addcc %g0, 0x0001, %g2
315 dec %g2
316 bcc B11
317 addcc %g0, 0x1fff, %g1
318 inc %g7
319B11: addcc %g0, 0x0002, %g2
320 dec %g2
321 bpos B12
322 addcc %g0, 0x1fff, %g1
323 inc %g7
324B12: addcc %g0, 0x0000, %g2
325 dec %g2
326 bneg B13
327 addcc %g0, 0x1fff, %g1
328 inc %g7
329B13: addcc %g0, 0x0001, %g2
330 dec %g2
331 bvc Bx
332 addcc %g0, 0x1fff, %g1
333 inc %g7
334Bx: cmp %g7, 0x0
335 nop
336 nop
337 nop
338
339 setx 0x524e4f2c0e9a829e, %g1, %g2
340 setx 0x0000000080000000, %g1, %g3
341 setx 0x7fffffff7fffffff, %g1, %g4
342 setx 0x0000000080000000, %g1, %g5
343 setx 0x0000000000000000, %g1, %g6
344 setx 0x5d7085ae11898343, %g1, %g7
345
346 ! Now do some useful stuff ..
347! unconditional Branches (BA, BN)
348! Icc-Conditional Branches (if taken, no annul)
349
350!ISA1
351!BPr1 = 00.0..1011......................
352!BPr2 = 00.0.1.011......................
353!BiccA = 00..000010......................
354!Bicc1 = 00..1..010......................
355!Bicc2 = 00...1.010......................
356!Bicc3 = 00....1010......................
357!BPccA = 00..000001......................
358!BPcc1 = 00..1..001......................
359!BPcc2 = 00...1.001......................
360!BPcc3 = 00....1001......................
361
362
363 add %g1, %g2, %g2
364 !add %g2, %g3, %g3
365 !add %g3, %g4, %g4
366 add %g4, %g5, %g6
367 add %g5, %g6, %g7
368 add %g6, %g7, %g1
369 bn,a C0a
370 addcc %g0, 0x0000, %g7
371C0a: addcc %g0, 0x0001, %g2
372 ba,a C0
373 addcc %g0, 0x0001, %g2
374 inc %g7
375C0: addcc %g0, 0x0001, %g2
376 ba C1a
377 addcc %g0, 0x0001, %g2
378 inc %g7
379C1a: addcc %g0, 0x0001, %g2
380 bn,a C1
381 addcc %g0, 0x0001, %g2
382 inc %g7
383C1: addcc %g0, 0x0001, %g2
384 bn C2a
385 addcc %g0, 0x0001, %g2
386 inc %g7
387C2a: addcc %g0, 0x0001, %g2
388 bne,a C2b ! taken & a
389 addcc %g0, 0x1fff, %g1
390 inc %g7
391C2b: addcc %g0, 0x0001, %g2
392 bne C2c ! taken & ~a
393 addcc %g0, 0x1fff, %g1
394 inc %g7
395C2c: addcc %g0, 0x0000, %g2
396 bne,a C2d ! ~taken & a
397 addcc %g0, 0x1fff, %g1
398 inc %g7
399C2d: addcc %g0, 0x0000, %g2
400 bne C3a ! ~taken & ~a
401 addcc %g0, 0x1fff, %g1
402 inc %g7
403C3a: addcc %g0, 0x0000, %g1
404 be,a C3b ! taken & a
405 addcc %g0, 0x1fff, %g1
406 inc %g7
407C3b: addcc %g0, 0x0000, %g1
408 be C3c ! taken & ~a
409 addcc %g0, 0x1fff, %g1
410 inc %g7
411C3c: addcc %g0, 0x0001, %g2
412 be,a C3d ! ~taken & a
413 addcc %g0, 0x1fff, %g1
414 inc %g7
415C3d: addcc %g0, 0x0001, %g2
416 be C4a ! ~taken & ~a
417 addcc %g0, 0x1fff, %g1
418 inc %g7
419C4a: addcc %g0, 0x0001, %g1
420 bg,a C4b ! taken & a
421 addcc %g0, 0x1fff, %g1
422 inc %g7
423C4b: addcc %g0, 0x0001, %g1
424 bg C4c ! taken & ~a
425 addcc %g0, 0x1fff, %g1
426 inc %g7
427C4c: addcc %g0, 0x0000, %g1
428 bg,a C4d ! ~taken & a
429 addcc %g0, 0x1fff, %g1
430 inc %g7
431C4d: addcc %g0, 0x0000, %g1
432 bg C5a ! ~taken & ~a
433 addcc %g0, 0x1fff, %g1
434 inc %g7
435C5a: addcc %g0, 0x0000, %g1
436 dec %g1
437 ble,a C5b ! taken & a
438 addcc %g0, 0x1fff, %g1
439 inc %g7
440C5b: addcc %g0, 0x0000, %g2
441 ble C5c ! taken & ~a
442 addcc %g0, 0x1fff, %g1
443 inc %g7
444C5c: addcc %g0, 0x0001, %g2
445 ble,a C5d ! ~taken & a
446 addcc %g0, 0x1fff, %g1
447 inc %g7
448C5d: addcc %g0, 0x0001, %g2
449 ble C6a ! ~taken & ~a
450 addcc %g0, 0x1fff, %g1
451 inc %g7
452C6a: addcc %g0, 0x0000, %g1
453 inc %g1
454 bge,a C6b ! taken & a
455 addcc %g0, 0x1fff, %g1
456 inc %g7
457C6b: addcc %g0, 0x0000, %g1
458 bge C6c ! taken & ~a
459 addcc %g0, 0x1fff, %g1
460 inc %g7
461C6c: subcc %g0, 0x0001, %g1
462 dec %g1
463 bge,a C6d ! ~taken & a
464 addcc %g0, 0x1fff, %g1
465 inc %g7
466C6d: subcc %g0, 0x0001, %g1
467 bge C7a ! ~taken & ~a
468 addcc %g0, 0x1fff, %g1
469 inc %g7
470C7a: addcc %g0, 0x1fff, %g2
471 inc %g2
472 bl,a C7b ! taken & a
473 addcc %g0, 0x1fff, %g1
474 inc %g7
475C7b: addcc %g0, 0x1fff, %g2
476 inc %g2
477 bl C7c ! taken & ~a
478 addcc %g0, 0x1fff, %g1
479 inc %g7
480C7c: addcc %g0, 0x0000, %g1
481 bl,a C7d ! ~taken & a
482 addcc %g0, 0x1fff, %g1
483 inc %g7
484C7d: addcc %g0, 0x0000, %g1
485 bl C8a ! ~taken & ~a
486 addcc %g0, 0x1fff, %g1
487 inc %g7
488C8a: addcc %g0, 0x0001, %g1
489 bgu,a C8b ! taken & a
490 addcc %g0, 0x1fff, %g1
491 inc %g7
492C8b: addcc %g0, 0x0001, %g1
493 bgu C8c ! taken & ~a
494 addcc %g0, 0x1fff, %g1
495 inc %g7
496C8c: addcc %g0, 0x0000, %g2
497 bgu,a C8d ! ~taken & a
498 addcc %g0, 0x1fff, %g1
499 inc %g7
500C8d: addcc %g0, 0x0000, %g2
501 bgu C9a ! ~taken & ~a
502 addcc %g0, 0x1fff, %g1
503 inc %g7
504C9a: addcc %g0, 0x0000, %g2
505 bleu,a C9b ! taken & a
506 addcc %g0, 0x1fff, %g1
507 inc %g7
508C9b: addcc %g0, 0x0000, %g2
509 bleu C9c ! taken & ~a
510 addcc %g0, 0x1fff, %g1
511 inc %g7
512C9c: addcc %g0, 0x0001, %g2
513 bleu,a C9d ! ~taken & a
514 addcc %g0, 0x1fff, %g1
515 inc %g7
516C9d: addcc %g0, 0x1fff, %g2
517 bleu C10a ! ~taken & ~a
518 addcc %g0, 0x1fff, %g1
519 inc %g7
520C10a: addcc %g0, 0x0001, %g6
521 bcc,a C10b ! taken & a
522 addcc %g0, 0x1fff, %g1
523 inc %g7
524C10b: addcc %g0, 0x0001, %g6
525 bcc C10c ! taken & ~a
526 addcc %g0, 0x1fff, %g1
527 inc %g7
528C10c: addcc %g1, 0x0001, %g5
529 bcc,a C10d ! ~taken & a
530 addcc %g0, 0x1fff, %g1
531 inc %g7
532C10d: addcc %g1, 0x0001, %g5
533 bcc C11a ! ~taken & ~a
534 addcc %g0, 0x1fff, %g1
535 inc %g7
536C11a: addcc %g1, 0x0001, %g5
537 bcs,a C11b ! taken & a
538 addcc %g0, 0x1fff, %g1
539 inc %g7
540C11b: addcc %g1, 0x0001, %g5
541 bcs C11c ! taken & ~a
542 addcc %g0, 0x1fff, %g1
543 inc %g7
544C11c: addcc %g0, 0x0001, %g6
545 bcs,a C11d ! ~taken & a
546 addcc %g0, 0x1fff, %g1
547 inc %g7
548C11d: addcc %g0, 0x0001, %g6
549 inc %g1
550 bcs C12a ! ~taken & ~a
551 addcc %g0, 0x1fff, %g1
552 inc %g7
553C12a: addcc %g0, 0x0000, %g2
554 inc %g2
555 bpos,a C12b ! taken & a
556 addcc %g0, 0x1fff, %g1
557 inc %g7
558C12b: addcc %g0, 0x0002, %g2
559 dec %g2
560 bpos C12c ! taken & ~a
561 addcc %g0, 0x1fff, %g1
562 inc %g7
563C12c: subcc %g0, 0x0001, %g5
564 bpos,a C12d ! ~taken & a
565 addcc %g0, 0x1fff, %g1
566 inc %g7
567C12d: subcc %g0, 0x0001, %g5
568 bpos C13a ! ~taken & ~a
569 addcc %g0, 0x1fff, %g1
570 inc %g7
571C13a: subcc %g0, 0x0001, %g5
572 bneg,a C13b ! taken & a
573 addcc %g0, 0x1fff, %g1
574 inc %g7
575C13b: subcc %g0, 0x0001, %g5
576 bneg C13c ! taken & ~a
577 addcc %g0, 0x1fff, %g1
578 inc %g7
579C13c: addcc %g0, 0x0000, %g2
580 inc %g2
581 bneg,a C13d ! ~taken & a
582 addcc %g0, 0x1fff, %g1
583 inc %g7
584C13d: addcc %g0, 0x0000, %g1
585 bneg C14a ! ~taken & ~a
586 addcc %g0, 0x1fff, %g1
587 inc %g7
588C14a: addcc %g0, 0x0001, %g2
589 dec %g2
590 bvc,a C14b ! taken & a
591 addcc %g0, 0x1fff, %g1
592 inc %g7
593C14b: addcc %g0, 0x0001, %g2
594 dec %g2
595 bvc C14c ! taken & ~a
596 addcc %g0, 0x1fff, %g1
597 inc %g7
598C14c: addcc %g4, 0x0002, %g5
599 bvc,a C14d ! ~taken & a
600 addcc %g0, 0x1fff, %g1
601 inc %g7
602C14d: addcc %g4, 0x0001, %g5
603 bvc C15a ! ~taken & ~a
604 addcc %g0, 0x1fff, %g1
605 inc %g7
606C15a: addcc %g4, 0x0001, %g5
607 dec %g2
608 bvs,a C15b ! taken & a
609 addcc %g0, 0x1fff, %g1
610 inc %g7
611C15b: addcc %g4, 0x0001, %g5
612 dec %g2
613 bvs C15c ! taken & ~a
614 addcc %g0, 0x1fff, %g1
615 inc %g7
616C15c: addcc %g0, 0x0001, %g2
617 inc %g2
618 bvs,a C15d ! ~taken & a
619 addcc %g0, 0x1fff, %g1
620 inc %g7
621C15d: addcc %g0, 0x0001, %g2
622 inc %g2
623 bvs Cz ! ~taken & ~a
624 addcc %g0, 0x1fff, %g1
625 inc %g7
626Cz: cmp %g7, 0x0
627 nop
628 nop
629 nop
630
631goodbye:
632 nop
633 nop
634!bad_trap:
635! b bad_trap
636 EXIT_BAD
637 nop
638 nop
639
640my_pass:
641 nop
642 nop
643 EXIT_GOOD
644!good_trap:
645! b good_trap
646 nop
647 nop
648
649!SECTION .DATA TEXT_VA = 0xffffff0000000000
650!attr_text {
651! Name=.DATA,
652! hypervisor
653!}
654
655.data
656.xword 0x0
657.xword 0x1
658.xword 0x2
659.xword 0x3
660.xword 0x4
661.xword 0x5
662.xword 0x6
663.xword 0x7
664
665.end
666
667