source: trunk/libs/newlib/src/libgloss/hp74x/iva_table.s @ 575

Last change on this file since 575 was 444, checked in by satin@…, 7 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 18.8 KB
Line 
1/****************************************************************************
2
3                THIS SOFTWARE IS NOT COPYRIGHTED
4
5   HP offers the following for use in the public domain.  HP makes no
6   warranty with regard to the software or it's performance and the
7   user accepts the software "AS IS" with all faults.
8
9   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
10   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
11   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12
13****************************************************************************/
14
15        .space  $TEXT$
16        .subspa $CODE$,access=0x2c
17
18#include        "diagnose.h"
19#if 0
20#include        "iva_table.h"
21#endif
22
23R_gr0           .equ     0
24R_gr1           .equ     4
25R_gr2           .equ     8
26R_gr3           .equ    12
27R_gr4           .equ    16
28R_gr5           .equ    20
29R_gr6           .equ    24
30R_gr7           .equ    28
31R_gr8           .equ    32
32R_gr9           .equ    36
33R_gr10          .equ    40
34R_gr11          .equ    44
35R_gr12          .equ    48
36R_gr13          .equ    52
37R_gr14          .equ    56
38R_gr15          .equ    60
39R_gr16          .equ    64
40R_gr17          .equ    68
41R_gr18          .equ    72
42R_gr19          .equ    76
43R_gr20          .equ    80
44R_gr21          .equ    84
45R_gr22          .equ    88
46R_gr23          .equ    92
47R_gr24          .equ    96
48R_gr25          .equ    100
49R_gr26          .equ    104
50R_gr27          .equ    108
51R_gr28          .equ    112
52R_gr29          .equ    116
53R_gr30          .equ    120
54R_gr31          .equ    124
55R_rctr          .equ    160
56R_cpu0          .equ    164
57R_pidr1         .equ    168
58R_pidr2         .equ    172
59R_ccr           .equ    176
60R_sar           .equ    180
61R_pidr3         .equ    184
62R_pidr4         .equ    188
63R_iva           .equ    192
64R_eiem          .equ    196
65
66R_itmr          .equ    200
67R_pcsqH         .equ    204
68R_pcoqH         .equ    208
69R_iir           .equ    212
70R_pcsqT         .equ    216
71R_pcoqT         .equ    220
72R_isr           .equ    224
73R_ior           .equ    228
74R_ipsw          .equ    232
75R_eirr          .equ    236
76R_tr0           .equ    240
77R_tr1           .equ    244
78R_tr2           .equ    248
79R_tr3           .equ    252
80R_tr4           .equ    256
81R_tr5           .equ    260
82R_tr6           .equ    264
83R_tr7           .equ    268
84
85R_SIZE          .equ    300
86
87        .import putc,code
88        .import puts,code
89        .import putnum,code
90        .import put_led,code
91        .import save_regs,code
92        .import STUB_RESTORE,code
93        .import RegBlk,data
94        .export iva_table,data
95        .IMPORT led_putnum,code
96        .IMPORT delay,code
97        .IMPORT putnum,code
98        .IMPORT outbyte,code
99        .IMPORT print,code
100
101        .align  2048
102iva_table
103        .blockz 32      ; entry 0 is reserved
104
105        .align  32
106hpmc
107        nop
108        b,n     hpmc_handler
109        nop
110        .word   0
111        .word   0
112        .word   0
113        .word   hpmc_handler
114        .word   0
115
116        .align  32
117power_fail
118;       PrintString     Str02,0x2
119        ldi     1,%r26
120        bl,n    putnum,%r2
121        nop
122       
123        .align  32
124recovery
125;;      PrintString     Str03,0x3
126        ldi     2,%r26
127        bl,n    putnum,%r2
128        nop
129                ldi     3,%r1
130        b,n     handle_rcc
131        nop
132
133        .align  32
134external
135;       PrintString     Str04,0x4
136        ldi     3,%r26
137        bl,n    putnum,%r2
138        nop
139       
140        .align  32
141lpmc
142;       PrintString     Str05,0x5
143        ldi     4,%r26
144        bl,n    putnum,%r2
145        nop
146       
147        .align  32
148itlb_miss
149;       PrintString     Str06,0x6
150        ldi     5,%r26
151        bl,n    putnum,%r2
152        nop
153       
154        .align  32
155imem_protection
156;       PrintString     Str07,0x7
157        ldi     6,%r26
158        bl,n    putnum,%r2
159        nop
160       
161        .align  32
162illegal_inst
163;       PrintString     Str08,0x8
164        ldi     7,%r26
165        bl,n    putnum,%r2
166        nop
167       
168        .align  32
169break
170        b,n     break_handler
171        nop
172
173        .align  32
174privileged_op
175;       PrintString     Str0a,0xa
176        ldi     8,%r26
177        bl,n    putnum,%r2
178        nop
179       
180        .align  32
181privileged_reg
182;       PrintString     Str0b,0xb
183        ldi     9,%r26
184        bl,n    putnum,%r2
185        nop
186       
187        .align  32
188overflow
189;       PrintString     Str0c,0xc
190        ldi     32,%r26
191        bl,n    putnum,%r2
192        nop
193       
194        .align  32
195conditional
196;       PrintString     Str0d,0xd
197        ldi     32,%r26
198        bl,n    putnum,%r2
199        nop
200       
201        .align  32
202assist_excep
203;       PrintString     Str0e,0xe
204        ldi     32,%r26
205        bl,n    putnum,%r2
206        nop
207       
208        .align  32
209dtlb_miss
210;       PrintString     Str0f,0xf
211        ldi     32,%r26
212        bl,n    putnum,%r2
213        nop
214       
215        .align  32
216na_itlb
217;       PrintString     Str10,0x10
218        ldi     32,%r26
219        bl,n    putnum,%r2
220        nop
221       
222        .align  32
223na_dtlb
224;       PrintString     Str11,0x11
225        ldi     32,%r26
226        bl,n    putnum,%r2
227        nop
228       
229        .align  32
230dmem_protection
231;       PrintString     Str12,0x12
232        ldi     32,%r26
233        bl,n    putnum,%r2
234        nop
235       
236        .align  32
237dmem_break
238;       PrintString     Str13,0x13
239        ldi     32,%r26
240        bl,n    putnum,%r2
241        nop
242       
243        .align  32
244tlb_dirty
245;       PrintString     Str14,0x14
246        ldi     32,%r26
247        bl,n    putnum,%r2
248        nop
249       
250        .align  32
251page_ref
252;       PrintString     Str15,0x15
253        ldi     32,%r26
254        bl,n    putnum,%r2
255        nop
256       
257        .align  32
258assist_emul
259;       PrintString     Str16,0x16
260        ldi     32,%r26
261        bl,n    putnum,%r2
262        nop
263       
264        .align  32
265high_priv
266;       PrintString     Str17,0x17
267        ldi     32,%r26
268        bl,n    putnum,%r2
269        nop
270       
271        .align  32
272low_priv
273;       PrintString     Str18,0x18
274        ldi     32,%r26
275        bl,n    putnum,%r2
276        nop
277       
278        .align  32
279branch_taken
280;       PrintString     Str19,0x19
281        ldi     32,%r26
282        bl,n    putnum,%r2
283        nop
284       
285/*
286 * foobar -- debug procedure calling between C and assembler
287 */
288        .EXPORT foobar,ENTRY,ARGW0=GR,RTNVAL=GR
289foobar
290        .PROC
291        .CALLINFO CALLER,FRAME=128,SAVE_RP
292        .ENTRY
293
294        stw     %r2,-20(0,%r30)                 ; stash the return pointer
295        ldo     128(%r30),%r30                  ; push up the stack pointer
296
297        ldi     8, %r26
298        bl,n    led_putnum,%r2
299        nop
300        ldil    L'900000,%r26
301        ldo     R'900000(%r26),%r26
302        bl,n    delay,%r2
303        nop
304        ldi     8, %r26
305        bl,n    led_putnum,%r2
306        nop
307        ldil    L'900000,%r26
308        ldo     R'900000(%r26),%r26
309        bl,n    delay,%r2
310        nop
311;;      copy    %r26,%r26
312;;      bl,n    putnum,%r2
313        nop
314
315        ldw     -148(0,%r30),%r2                ; retrieve the return pointer
316        ldo     -128(%r30),%r30                 ; reset the stack pointer
317        bv,n    0(%r2)
318        nop
319       
320        .EXIT
321        .PROCEND
322       
323/*
324 * setup_vectors -- add vectors for GDB to the vector table.
325 *      %r3 - current vector table
326 *      %r4 - new vector table
327 */
328        .EXPORT setup_vectors,ENTRY,ARGW0=GR,RTNVAL=GR
329setup_vectors
330        .PROC
331        .CALLINFO CALLER,FRAME=128,SAVE_RP
332        .ENTRY
333        stw     %r2,-20(0,%r30)                 ; stash the return pointer
334        ldo     128(%r30),%r30                  ; push up the stack pointer
335
336        mfctl   %iva,%r3
337
338        ldil    L%iva_table,%r4                 ; Get the new vector table
339        ldo     R%iva_table(%r4),%r4            ; address
340       
341        ldil    L%break_handler,%r5             ; Get the breakpoint
342        ldo     R%break_handler(%r5),%r5        ; handler vector
343
344        ldil    L%break_default,%r6             ; Get the default handler
345        ldo     R%break_default(%r6),%r6        ; vector
346
347        stw     %r6,4(%r4)                      ; ad the default vector
348        stw     %r5,36(%r4)                     ; add the break vector
349
350        mtctl   %r4,%iva
351       
352        ldw     -148(0,%r30),%r2                ; retrieve the return pointer
353        ldo     -128(%r30),%r30                 ; reset the stack pointer
354        bv,n    0(%r2)
355        nop
356       
357        .EXIT
358        .PROCEND
359
360;-------------------------------------------------------------------------------
361hpmc_handler
362        bl,n    save_state,%r25
363        nop
364        bl      print_intr,%rp
365        ldi     Str01-Str01,%arg0
366        bl      print_state,%rp
367        nop
368        ldil    L%0xf0000000,%r1
369        ldw     (%r1),%r1               ; read from ROM to reset HPMC
370
371        mfcpu_c 0,%r1
372        mfcpu_c 0,%r1
373        depi    0,CPU_DIAG_0_PREV_HPMC_PREP_BIT,1,%r1   ; clear Prev HPMC bit
374       
375#ifdef PCXL
376        depi    0,CPU_DIAG_0_L2DHPMC_BIT,1,%r1
377        depi    0,CPU_DIAG_0_L2IHPMC_BIT,1,%r1
378        depi    0,CPU_DIAG_0_L1IHPMC_BIT,1,%r1
379        depi    0,CPU_DIAG_0_L2PARERR_BIT,4,%r1
380#else   /* PCXT */
381        depi    0,CPU_DIAG_0_DHPMC_BIT,1,%r1            ; don't clear DHPMC
382        depi    0,CPU_DIAG_0_ILPMC_BIT,1,%r1            ; don't clear ILPMC
383        depi    0,CPU_DIAG_0_HTOC_BIT,1,%r1             ; don't clear HTOC
384#endif
385
386        mtcpu   %r1,0
387        mtcpu   %r1,0
388
389        b,n     restore_to_STUB
390        ldi     0x1,%r1
391
392/*
393 * break_handler -- this is the main entry point for an exception
394 */
395        .ALIGN  2048
396break_handler
397
398        mfctl   %iir,%r1                        ; r1 = break instruction
399        extru   %r1,18,13,%r8
400        ldo     -i13BREAK(%r8),%r8              ; if im13 field doesn't match
401        comb,<>,n %r8,%r0,break_default         ;   go to default operation
402        extru   %r1,31,5,%r8
403        ldi     0x9,%r1                         ; set exception index
404        comib,=,n i5BP,%r8,break_breakpoint
405        comib,=,n i5PSW,%r8,break_psw
406        comib,=,n i5REG,%r8,break_reg_init
407        comib,=,n i5INLINE,%r8,break_breakpoint
408        ; fall through to break_default
409
410break_default
411;       PrintString     Str09,0x9
412        ldi     32,%r26
413        bl,n    putnum,%r2
414        nop
415       
416break_reg_init
417        bl      setup_vectors,%r25
418        nop
419        bl      save_regs,%r25
420        nop
421        ; fall through to advance past break instruction
422
423break_psw
424        b,n     recover
425
426break_breakpoint
427        b,n     STUB_RESTORE
428
429;-------------------------------------------------------------------------------
430
431handle_rcc
432        mfctl   %ipsw,%r1
433        bb,>=,n %r1,10,do_restore       ; check nullify bit
434        dep     %r0,10,1,%r1
435        mtctl   %r1,%ipsw               ; clear nullify bit
436
437        ;; was the AdvancePCOQ .macro
438        mtctl   %r0,%pcoq               ; throw away iiaoq head pointer, tail->head
439        mfctl   %pcoq,%r1               ; get tail pointer
440        mtctl   %r1,%pcoq               ; insert tail pointer
441        ldo     4(%r1),%r1              ; advance tail pointer
442        mtctl   %r1,%pcoq               ; insert new tail pointer, former tail->head
443
444do_restore
445        b,n     STUB_RESTORE
446        nop
447;-------------------------------------------------------------------------------
448
449print_intr
450; %dp may be messed up, so do self-relocating to reach Save_area
451        blr     %r0,%r1
452        addil   L%Str01-pr_intr_0,%r1
453
454pr_intr_0
455        ldo     R%Str01-pr_intr_0(%r1),%r1      ; r1 points to Save_area
456        b       puts                            ; print string--return through rp
457        add     %r1,%arg0,%arg0
458
459;-------------------------------------------------------------------------------
460
461halt
462; %dp may be messed up, so do self-relocating to reach Save_area
463        blr     %r0,%r1
464        addil   L%HaltStr-halt_0,%r1
465
466halt_0
467        bl      puts,%rp                        ; print halt message
468        ldo     R%HaltStr-halt_0(%r1),%arg0
469
470        nop
471        b,n     .                               ; loop forever
472        nop
473
474;-------------------------------------------------------------------------------
475
476recover
477        ;; was the AdvancePCOQ .macro
478        mtctl   %r0,%pcoq                       ; throw away iiaoq head pointer, tail->head
479        mfctl   %pcoq,%r1                       ; get tail pointer
480        mtctl   %r1,%pcoq                       ; insert tail pointer
481        ldo     4(%r1),%r1                      ; advance tail pointer
482        mtctl   %r1,%pcoq                       ; insert new tail pointer, former tail->head
483
484        rfir
485
486;-------------------------------------------------------------------------------
487
488save_state      ; %r25 is return pointer
489; %dp may be messed up, so do self-relocating to reach Save_area
490        blr     %r0,%r1
491        addil   L%Save_area-sa_st_0,%r1
492
493sa_st_0
494        ldo     R%Save_area-sa_st_0(%r1),%r1    ; r1 points to Save_area
495
496; save general registers
497        stw     %r0,R_gr0(%r1)
498                                ; don't save %r1 until restored
499        stw     %r2,R_gr2(%r1)
500        stw     %r3,R_gr3(%r1)
501        stw     %r4,R_gr4(%r1)
502        stw     %r5,R_gr5(%r1)
503        stw     %r6,R_gr6(%r1)
504        stw     %r7,R_gr7(%r1)
505                                ; don't save %r8, %r9 until restored
506        stw     %r10,R_gr10(%r1)
507        stw     %r11,R_gr11(%r1)
508        stw     %r12,R_gr12(%r1)
509        stw     %r13,R_gr13(%r1)
510        stw     %r14,R_gr14(%r1)
511        stw     %r15,R_gr15(%r1)
512                                ; don't save %r16, %r17 until restored
513        stw     %r18,R_gr18(%r1)
514        stw     %r19,R_gr19(%r1)
515        stw     %r20,R_gr20(%r1)
516        stw     %r21,R_gr21(%r1)
517        stw     %r22,R_gr22(%r1)
518        stw     %r23,R_gr23(%r1)
519                                ; don't save %r24, %r25 until restored
520        stw     %r26,R_gr26(%r1)
521        stw     %r27,R_gr27(%r1)
522        stw     %r28,R_gr28(%r1)
523        stw     %r29,R_gr29(%r1)
524        copy    %r25,%rp        ; copy return pointer to %rp
525        stw     %r30,R_gr30(%r1)
526        copy    %r1,%r19        ; save Save_area pointer in %r19
527        stw     %r31,R_gr31(%r1)
528        shdw_gr                 ; restore %r1 and %r25 (et al.) from shadow regs
529        shdw_gr
530        stw     %r1,R_gr1(%r19) ; save %r1
531        stw     %r8,R_gr8(%r19)
532        stw     %r9,R_gr9(%r19)
533        stw     %r16,R_gr16(%r19)
534        stw     %r17,R_gr17(%r19)
535        stw     %r24,R_gr24(%r19)
536
537; save control registers
538        mfctl   %rctr,%r1
539        stw     %r1,R_rctr(%r19)
540        mfctl   %pidr1,%r1
541        stw     %r1,R_pidr1(%r19)
542        mfctl   %pidr2,%r1
543        stw     %r1,R_pidr2(%r19)
544        mfctl   %ccr,%r1
545        stw     %r1,R_ccr(%r19)
546        mfctl   %sar,%r1
547        stw     %r1,R_sar(%r19)
548        mfctl   %pidr3,%r1
549        stw     %r1,R_pidr3(%r19)
550        mfctl   %pidr4,%r1
551        stw     %r1,R_pidr4(%r19)
552        mfctl   %iva,%r1
553        stw     %r1,R_iva(%r19)
554        mfctl   %eiem,%r1
555        stw     %r1,R_eiem(%r19)
556        mfctl   %itmr,%r1
557        stw     %r1,R_itmr(%r19)
558        mfctl   %pcsq,%r1
559        mtctl   %r1,%pcsq
560        stw     %r1,R_pcsqH(%r19)
561        mfctl   %pcsq,%r1
562        mtctl   %r1,%pcsq
563        stw     %r1,R_pcsqT(%r19)
564        mfctl   %pcoq,%r1
565        mtctl   %r1,%pcoq
566        stw     %r1,R_pcoqH(%r19)
567        mfctl   %pcoq,%r1
568        mtctl   %r1,%pcoq
569        stw     %r1,R_pcoqT(%r19)
570        mfctl   %iir,%r1
571        stw     %r1,R_iir(%r19)
572        mfctl   %isr,%r1
573        stw     %r1,R_isr(%r19)
574        mfctl   %ior,%r1
575        stw     %r1,R_ior(%r19)
576        mfctl   %ipsw,%r1
577        stw     %r1,R_ipsw(%r19)
578        mfctl   %eirr,%r1
579        stw     %r1,R_eirr(%r19)
580        mfctl   %tr0,%r1
581        stw     %r1,R_tr0(%r19)
582        mfctl   %tr1,%r1
583        stw     %r1,R_tr1(%r19)
584        mfctl   %tr2,%r1
585        stw     %r1,R_tr2(%r19)
586        mfctl   %tr3,%r1
587        stw     %r1,R_tr3(%r19)
588        mfctl   %tr4,%r1
589        stw     %r1,R_tr4(%r19)
590        mfctl   %tr5,%r1
591        stw     %r1,R_tr5(%r19)
592        mfctl   %tr6,%r1
593        stw     %r1,R_tr6(%r19)
594        mfctl   %tr7,%r1
595        stw     %r1,R_tr7(%r19)
596
597; save diagnose registers
598        mfcpu_c 0,%r1
599        mfcpu_c 0,%r1
600        stw     %r1,R_cpu0(%r19)
601
602#ifdef  PRINT_SPACE
603        stw     %r25,R_gr25(%r19)
604
605; save space registers
606        mfsp    %sr0,%r1
607        stw     %r1,R_sr0(%r19)
608        mfsp    %sr1,%r1
609        stw     %r1,R_sr1(%r19)
610        mfsp    %sr2,%r1
611        stw     %r1,R_sr2(%r19)
612        mfsp    %sr3,%r1
613        stw     %r1,R_sr3(%r19)
614        mfsp    %sr4,%r1
615        stw     %r1,R_sr4(%r19)
616        mfsp    %sr5,%r1
617        stw     %r1,R_sr5(%r19)
618        mfsp    %sr6,%r1
619        stw     %r1,R_sr6(%r19)
620        mfsp    %sr7,%r1
621        bv      (%rp)
622        stw     %r1,R_sr7(%r19)
623#else
624        bv      (%rp)
625        stw     %r25,R_gr25(%r19)
626#endif
627
628
629;-------------------------------------------------------------------------------
630
631restore_to_STUB         ; doesn't return--goes to STUB_RESTORE
632                        ; Note--STUB_RESTORE executes rfir,
633                        ;       so we don't need to
634        copy    %r1,%r8 ; save exception index
635; %dp may be messed up, so do self-relocating to reach Save_area
636        bl      re_st_0,%r1
637        addil   L%Save_area-re_st_0,%r1
638
639re_st_0
640        ldo     R%Save_area-re_st_0(%r1),%r1    ; r1 points to Save_area
641
642; restore general registers
643        ldw     R_gr2(%r1),%r2
644        ldw     R_gr3(%r1),%r3
645        ldw     R_gr4(%r1),%r4
646        ldw     R_gr5(%r1),%r5
647        ldw     R_gr6(%r1),%r6
648        ldw     R_gr7(%r1),%r7
649;       ldw     R_gr8(%r1),%r8         don't smash the exception index
650        ldw     R_gr9(%r1),%r9
651        ldw     R_gr10(%r1),%r10
652        ldw     R_gr11(%r1),%r11
653        ldw     R_gr12(%r1),%r12
654        ldw     R_gr13(%r1),%r13
655        ldw     R_gr14(%r1),%r14
656        ldw     R_gr15(%r1),%r15
657        ldw     R_gr16(%r1),%r16
658        ldw     R_gr17(%r1),%r17
659        ldw     R_gr18(%r1),%r18
660        ldw     R_gr19(%r1),%r19
661        ldw     R_gr20(%r1),%r20
662        ldw     R_gr21(%r1),%r21
663        ldw     R_gr22(%r1),%r22
664        ldw     R_gr23(%r1),%r23
665        ldw     R_gr24(%r1),%r24
666        ldw     R_gr25(%r1),%r25
667        ldw     R_gr26(%r1),%r26
668        ldw     R_gr27(%r1),%r27
669        ldw     R_gr28(%r1),%r28
670        ldw     R_gr29(%r1),%r29
671        ldw     R_gr30(%r1),%r30
672        ldw     R_gr31(%r1),%r31
673        ldw     R_gr1(%r1),%r1
674        b       STUB_RESTORE
675        copy    %r8,%r1                 ; restore the exception index
676
677;-------------------------------------------------------------------------------
678
679#define HoldPtr         %r10
680#define SavePtr         %r11
681#define StrPtr          %r12
682#define Count           %r13
683
684#define Hold_Hold       0*4     /* First word of hold area */
685#define Hold_Save       1*4     /* Second word of hold area */
686#define Hold_Str        2*4     /* Third word of hold area */
687#define Hold_Count      3*4     /* Fourth word of hold area */
688#define Hold_rp         4*4     /* Fifth word of hold area */
689
690print_state
691; %dp may be messed up, so do self-relocating to reach Save_area
692        blr     %r0,%mrp
693        addil   L%Hold_area-pr_st_0,%mrp
694
695pr_st_0
696        ldo     R%Hold_area-pr_st_0(%r1),%r1    ; r1 points to Hold_area
697
698; save working registers
699
700        stw     HoldPtr,Hold_Hold(%r1)
701        copy    %r1,HoldPtr                     ; HoldPtr = &Hold_area
702        stw     SavePtr,Hold_Save(HoldPtr)
703        ldo     Save_area-Hold_area(HoldPtr),SavePtr    ; SavePtr = &Save_area
704        stw     StrPtr,Hold_Str(HoldPtr)
705        addil   L%PrintLabels-pr_st_0,%mrp
706        stw     Count,Hold_Count(HoldPtr)
707        ldo     R%PrintLabels-pr_st_0(%r1),StrPtr
708        stw     %rp,Hold_rp(HoldPtr)
709
710
711#ifdef  PRINT_SPACE
712        ldi     68,Count
713#else
714        ldo     R_gr0(SavePtr),SavePtr
715        ldi     60,Count
716#endif
717
718; print register values
719
720print_loop
721        bl      puts,%rp                ; print label
722        ldo     1(StrPtr),%arg0         ; advance past length byte
723        bl      putnum,%rp              ; print register value
724        ldwm    4(SavePtr),%arg0
725        ldbs,ma 1(StrPtr),%r1
726        addib,> -1,Count,print_loop
727        add     %r1,StrPtr,StrPtr
728
729; skip to next line
730        bl      puts,%rp                ; print label
731        ldo     1(StrPtr),%arg0         ; advance past length byte
732
733; restore working registers
734
735        ldw     Hold_rp(HoldPtr),%rp
736        ldw     Hold_Count(HoldPtr),Count
737        ldw     Hold_Str(HoldPtr),StrPtr
738        ldw     Hold_Save(HoldPtr),SavePtr
739        bv      (%rp)
740        ldw     Hold_Hold(HoldPtr),HoldPtr
741
742#undef  SavePtr
743#undef  HoldPtr
744#undef  StrPtr
745#undef  Count
746
747#undef  Hold_Save
748#undef  Hold_Scr
749#undef  Hold_Str
750#undef  Hold_Count
751#undef  Hold_rp
752
753;-------------------------------------------------------------------------------
754
755        .space  $PRIVATE$
756        .subspa $DATA$,align=4,access=0x1f
757
758/* Used to save machine registers before printing */
759Save_area
760        .block          R_SIZE          ; Used to store registers
761
762/* Used to hold callee-save registers */
763Hold_area
764        .block          8*4             ; 8 words to store temp. registers
765
766HaltStr
767        .stringz        "\r\nHalted\r\n"
768
769RebootStr
770        .stringz        "\r\nRebooting . . .\r\n"
771
772Str01
773        .stringz        "\r\nHPMC\r\n"
774
775Str02
776        .stringz        "\r\nPower Fail\r\n"
777
778Str03
779        .stringz        "\r\nRecovery Counter Trap\r\n"
780
781Str04
782        .stringz        "\r\nExternal Interrupt\r\n"
783
784Str05
785        .stringz        "\r\nLPMC\r\n"
786
787Str06
788        .stringz        "\r\nITLB Miss\r\n"
789
790Str07
791        .stringz        "\r\nInstruction Memory Protection Trap\r\n"
792
793Str08
794        .stringz        "\r\nIllegal Instruction\r\n"
795
796Str09
797        .stringz        "\r\nBreak Trap\r\n"
798
799Str0a
800        .stringz        "\r\nPrivileged Operation\r\n"
801
802Str0b
803        .stringz        "\r\nPrivileged Register\r\n"
804
805Str0c
806        .stringz        "\r\nOverflow Trap\r\n"
807
808Str0d
809        .stringz        "\r\nConditional Trap\r\n"
810
811Str0e
812        .stringz        "\r\nAssist Exception\r\n"
813
814Str0f
815        .stringz        "\r\nData TLB Miss\r\n"
816
817Str10
818        .stringz        "\r\nNon-access ITLB Miss\r\n"
819
820Str11
821        .stringz        "\r\nNon-access DTLB Miss\r\n"
822
823Str12
824        .stringz        "\r\nData Memory Protection Trap\r\n"
825
826Str13
827        .stringz        "\r\nData Memory Break\r\n"
828
829Str14
830        .stringz        "\r\nTLB Dirty Bit Trap\r\n"
831
832Str15
833        .stringz        "\r\nPage Reference Trap\r\n"
834
835Str16
836        .stringz        "\r\nAssist Emulation Trap\r\n"
837
838Str17
839        .stringz        "\r\nHigher-privilege Trap\r\n"
840
841Str18
842        .stringz        "\r\nLower-privilege Trap\r\n"
843
844Str19
845        .stringz        "\r\nTaken Branch Trap\r\n"
846
847Str20
848        .stringz        "\r\nHere I am!\r\n"
849
850PrintLabels
851#ifdef  PRINT_SPACE
852        .byte           10
853        .stringz        "sr 0 = 0x"
854        .byte           13
855        .stringz        "sr 1 = 0x"
856        .byte           13
857        .stringz        "sr 2 = 0x"
858        .byte           13
859        .stringz        "   sr 3 = 0x"
860        .byte           12
861        .stringz        "\r\nsr 4 = 0x"
862        .byte           13
863        .stringz        "   sr 5 = 0x"
864        .byte           13
865        .stringz        "   sr 6 = 0x"
866        .byte           13
867        .stringz        "   sr 7 = 0x"
868        .byte           13
869        .stringz        "\r\n\ngr 0 = 0x"
870#else
871        .byte           10
872        .stringz        "gr 0 = 0x"
873#endif
874
875        .byte           13
876        .stringz        "   gr 1 = 0x"
877        .byte           13
878        .stringz        "   gr 2 = 0x"
879        .byte           13
880        .stringz        "   gr 3 = 0x"
881        .byte           12
882        .stringz        "\r\ngr 4 = 0x"
883        .byte           13
884        .stringz        "   gr 5 = 0x"
885        .byte           13
886        .stringz        "   gr 6 = 0x"
887        .byte           13
888        .stringz        "   gr 7 = 0x"
889        .byte           12
890        .stringz        "\r\ngr 8 = 0x"
891        .byte           13
892        .stringz        "   gr 9 = 0x"
893        .byte           13
894        .stringz        "   gr10 = 0x"
895        .byte           13
896        .stringz        "   gr11 = 0x"
897        .byte           12
898        .stringz        "\r\ngr12 = 0x"
899        .byte           13
900        .stringz        "   gr13 = 0x"
901        .byte           13
902        .stringz        "   gr14 = 0x"
903        .byte           13
904        .stringz        "   gr15 = 0x"
905        .byte           12
906        .stringz        "\r\ngr16 = 0x"
907        .byte           13
908        .stringz        "   gr17 = 0x"
909        .byte           13
910        .stringz        "   gr18 = 0x"
911        .byte           13
912        .stringz        "   gr19 = 0x"
913        .byte           12
914        .stringz        "\r\ngr20 = 0x"
915        .byte           13
916        .stringz        "   gr21 = 0x"
917        .byte           13
918        .stringz        "   gr22 = 0x"
919        .byte           13
920        .stringz        "   gr23 = 0x"
921        .byte           12
922        .stringz        "\r\ngr24 = 0x"
923        .byte           13
924        .stringz        "   gr25 = 0x"
925        .byte           13
926        .stringz        "   gr26 = 0x"
927        .byte           13
928        .stringz        "   gr27 = 0x"
929        .byte           12
930        .stringz        "\r\ngr28 = 0x"
931        .byte           13
932        .stringz        "   gr29 = 0x"
933        .byte           13
934        .stringz        "   gr30 = 0x"
935        .byte           13
936        .stringz        "   gr31 = 0x"
937        .byte           13
938        .stringz        "\r\n\nrctr = 0x"
939        .byte           53
940        .stringz        "                                           cpu0 = 0x"
941        .byte           12
942        .stringz        "\r\npid1 = 0x"
943        .byte           13
944        .stringz        "   pid2 = 0x"
945        .byte           13
946        .stringz        "    ccr = 0x"
947        .byte           13
948        .stringz        "    sar = 0x"
949        .byte           12
950        .stringz        "\r\npid3 = 0x"
951        .byte           13
952        .stringz        "   pid4 = 0x"
953        .byte           13
954        .stringz        "    iva = 0x"
955        .byte           13
956        .stringz        "   eiem = 0x"
957        .byte           12
958        .stringz        "\r\nitmr = 0x"
959        .byte           13
960        .stringz        "   iasq = 0x"
961        .byte           13
962        .stringz        "   iaoq = 0x"
963        .byte           13
964        .stringz        "    iir = 0x"
965        .byte           32
966        .stringz        "\r\n                    iasq = 0x"
967        .byte           13
968        .stringz        "   iaoq = 0x"
969        .byte           12
970        .stringz        "\r\n isr = 0x"
971        .byte           13
972        .stringz        "    ior = 0x"
973        .byte           13
974        .stringz        "   ipsw = 0x"
975        .byte           13
976        .stringz        "   eirr = 0x"
977        .byte           12
978        .stringz        "\r\ncr24 = 0x"
979        .byte           13
980        .stringz        "   cr25 = 0x"
981        .byte           13
982        .stringz        "   cr26 = 0x"
983        .byte           13
984        .stringz        "   cr27 = 0x"
985        .byte           12
986        .stringz        "\r\ncr28 = 0x"
987        .byte           13
988        .stringz        "   cr29 = 0x"
989        .byte           13
990        .stringz        "   cr30 = 0x"
991        .byte           13
992        .stringz        "   cr31 = 0x"
993        .byte           4
994        .stringz        "\r\n\n"
995
996        .end
Note: See TracBrowser for help on using the repository browser.