📄 iva_table.s
字号:
stw %r3,R_gr3(%r1) stw %r4,R_gr4(%r1) stw %r5,R_gr5(%r1) stw %r6,R_gr6(%r1) stw %r7,R_gr7(%r1) ; don't save %r8, %r9 until restored stw %r10,R_gr10(%r1) stw %r11,R_gr11(%r1) stw %r12,R_gr12(%r1) stw %r13,R_gr13(%r1) stw %r14,R_gr14(%r1) stw %r15,R_gr15(%r1) ; don't save %r16, %r17 until restored stw %r18,R_gr18(%r1) stw %r19,R_gr19(%r1) stw %r20,R_gr20(%r1) stw %r21,R_gr21(%r1) stw %r22,R_gr22(%r1) stw %r23,R_gr23(%r1) ; don't save %r24, %r25 until restored stw %r26,R_gr26(%r1) stw %r27,R_gr27(%r1) stw %r28,R_gr28(%r1) stw %r29,R_gr29(%r1) copy %r25,%rp ; copy return pointer to %rp stw %r30,R_gr30(%r1) copy %r1,%r19 ; save Save_area pointer in %r19 stw %r31,R_gr31(%r1) shdw_gr ; restore %r1 and %r25 (et al.) from shadow regs shdw_gr stw %r1,R_gr1(%r19) ; save %r1 stw %r8,R_gr8(%r19) stw %r9,R_gr9(%r19) stw %r16,R_gr16(%r19) stw %r17,R_gr17(%r19) stw %r24,R_gr24(%r19); save control registers mfctl %rctr,%r1 stw %r1,R_rctr(%r19) mfctl %pidr1,%r1 stw %r1,R_pidr1(%r19) mfctl %pidr2,%r1 stw %r1,R_pidr2(%r19) mfctl %ccr,%r1 stw %r1,R_ccr(%r19) mfctl %sar,%r1 stw %r1,R_sar(%r19) mfctl %pidr3,%r1 stw %r1,R_pidr3(%r19) mfctl %pidr4,%r1 stw %r1,R_pidr4(%r19) mfctl %iva,%r1 stw %r1,R_iva(%r19) mfctl %eiem,%r1 stw %r1,R_eiem(%r19) mfctl %itmr,%r1 stw %r1,R_itmr(%r19) mfctl %pcsq,%r1 mtctl %r1,%pcsq stw %r1,R_pcsqH(%r19) mfctl %pcsq,%r1 mtctl %r1,%pcsq stw %r1,R_pcsqT(%r19) mfctl %pcoq,%r1 mtctl %r1,%pcoq stw %r1,R_pcoqH(%r19) mfctl %pcoq,%r1 mtctl %r1,%pcoq stw %r1,R_pcoqT(%r19) mfctl %iir,%r1 stw %r1,R_iir(%r19) mfctl %isr,%r1 stw %r1,R_isr(%r19) mfctl %ior,%r1 stw %r1,R_ior(%r19) mfctl %ipsw,%r1 stw %r1,R_ipsw(%r19) mfctl %eirr,%r1 stw %r1,R_eirr(%r19) mfctl %tr0,%r1 stw %r1,R_tr0(%r19) mfctl %tr1,%r1 stw %r1,R_tr1(%r19) mfctl %tr2,%r1 stw %r1,R_tr2(%r19) mfctl %tr3,%r1 stw %r1,R_tr3(%r19) mfctl %tr4,%r1 stw %r1,R_tr4(%r19) mfctl %tr5,%r1 stw %r1,R_tr5(%r19) mfctl %tr6,%r1 stw %r1,R_tr6(%r19) mfctl %tr7,%r1 stw %r1,R_tr7(%r19); save diagnose registers mfcpu_c 0,%r1 mfcpu_c 0,%r1 stw %r1,R_cpu0(%r19)#ifdef PRINT_SPACE stw %r25,R_gr25(%r19); save space registers mfsp %sr0,%r1 stw %r1,R_sr0(%r19) mfsp %sr1,%r1 stw %r1,R_sr1(%r19) mfsp %sr2,%r1 stw %r1,R_sr2(%r19) mfsp %sr3,%r1 stw %r1,R_sr3(%r19) mfsp %sr4,%r1 stw %r1,R_sr4(%r19) mfsp %sr5,%r1 stw %r1,R_sr5(%r19) mfsp %sr6,%r1 stw %r1,R_sr6(%r19) mfsp %sr7,%r1 bv (%rp) stw %r1,R_sr7(%r19)#else bv (%rp) stw %r25,R_gr25(%r19)#endif;-------------------------------------------------------------------------------restore_to_STUB ; doesn't return--goes to STUB_RESTORE ; Note--STUB_RESTORE executes rfir, ; so we don't need to copy %r1,%r8 ; save exception index; %dp may be messed up, so do self-relocating to reach Save_area bl re_st_0,%r1 addil L%Save_area-re_st_0,%r1re_st_0 ldo R%Save_area-re_st_0(%r1),%r1 ; r1 points to Save_area; restore general registers ldw R_gr2(%r1),%r2 ldw R_gr3(%r1),%r3 ldw R_gr4(%r1),%r4 ldw R_gr5(%r1),%r5 ldw R_gr6(%r1),%r6 ldw R_gr7(%r1),%r7; ldw R_gr8(%r1),%r8 don't smash the exception index ldw R_gr9(%r1),%r9 ldw R_gr10(%r1),%r10 ldw R_gr11(%r1),%r11 ldw R_gr12(%r1),%r12 ldw R_gr13(%r1),%r13 ldw R_gr14(%r1),%r14 ldw R_gr15(%r1),%r15 ldw R_gr16(%r1),%r16 ldw R_gr17(%r1),%r17 ldw R_gr18(%r1),%r18 ldw R_gr19(%r1),%r19 ldw R_gr20(%r1),%r20 ldw R_gr21(%r1),%r21 ldw R_gr22(%r1),%r22 ldw R_gr23(%r1),%r23 ldw R_gr24(%r1),%r24 ldw R_gr25(%r1),%r25 ldw R_gr26(%r1),%r26 ldw R_gr27(%r1),%r27 ldw R_gr28(%r1),%r28 ldw R_gr29(%r1),%r29 ldw R_gr30(%r1),%r30 ldw R_gr31(%r1),%r31 ldw R_gr1(%r1),%r1 b STUB_RESTORE copy %r8,%r1 ; restore the exception index;-------------------------------------------------------------------------------#define HoldPtr %r10#define SavePtr %r11#define StrPtr %r12#define Count %r13#define Hold_Hold 0*4 /* First word of hold area */#define Hold_Save 1*4 /* Second word of hold area */#define Hold_Str 2*4 /* Third word of hold area */#define Hold_Count 3*4 /* Fourth word of hold area */#define Hold_rp 4*4 /* Fifth word of hold area */print_state; %dp may be messed up, so do self-relocating to reach Save_area blr %r0,%mrp addil L%Hold_area-pr_st_0,%mrppr_st_0 ldo R%Hold_area-pr_st_0(%r1),%r1 ; r1 points to Hold_area; save working registers stw HoldPtr,Hold_Hold(%r1) copy %r1,HoldPtr ; HoldPtr = &Hold_area stw SavePtr,Hold_Save(HoldPtr) ldo Save_area-Hold_area(HoldPtr),SavePtr ; SavePtr = &Save_area stw StrPtr,Hold_Str(HoldPtr) addil L%PrintLabels-pr_st_0,%mrp stw Count,Hold_Count(HoldPtr) ldo R%PrintLabels-pr_st_0(%r1),StrPtr stw %rp,Hold_rp(HoldPtr)#ifdef PRINT_SPACE ldi 68,Count#else ldo R_gr0(SavePtr),SavePtr ldi 60,Count#endif; print register valuesprint_loop bl puts,%rp ; print label ldo 1(StrPtr),%arg0 ; advance past length byte bl putnum,%rp ; print register value ldwm 4(SavePtr),%arg0 ldbs,ma 1(StrPtr),%r1 addib,> -1,Count,print_loop add %r1,StrPtr,StrPtr; skip to next line bl puts,%rp ; print label ldo 1(StrPtr),%arg0 ; advance past length byte; restore working registers ldw Hold_rp(HoldPtr),%rp ldw Hold_Count(HoldPtr),Count ldw Hold_Str(HoldPtr),StrPtr ldw Hold_Save(HoldPtr),SavePtr bv (%rp) ldw Hold_Hold(HoldPtr),HoldPtr#undef SavePtr#undef HoldPtr#undef StrPtr#undef Count#undef Hold_Save#undef Hold_Scr#undef Hold_Str#undef Hold_Count#undef Hold_rp;------------------------------------------------------------------------------- .space $PRIVATE$ .subspa $DATA$,align=4,access=0x1f/* Used to save machine registers before printing */Save_area .block R_SIZE ; Used to store registers/* Used to hold callee-save registers */Hold_area .block 8*4 ; 8 words to store temp. registersHaltStr .stringz "\r\nHalted\r\n"RebootStr .stringz "\r\nRebooting . . .\r\n"Str01 .stringz "\r\nHPMC\r\n"Str02 .stringz "\r\nPower Fail\r\n"Str03 .stringz "\r\nRecovery Counter Trap\r\n"Str04 .stringz "\r\nExternal Interrupt\r\n"Str05 .stringz "\r\nLPMC\r\n"Str06 .stringz "\r\nITLB Miss\r\n"Str07 .stringz "\r\nInstruction Memory Protection Trap\r\n"Str08 .stringz "\r\nIllegal Instruction\r\n"Str09 .stringz "\r\nBreak Trap\r\n"Str0a .stringz "\r\nPrivileged Operation\r\n"Str0b .stringz "\r\nPrivileged Register\r\n"Str0c .stringz "\r\nOverflow Trap\r\n"Str0d .stringz "\r\nConditional Trap\r\n"Str0e .stringz "\r\nAssist Exception\r\n"Str0f .stringz "\r\nData TLB Miss\r\n"Str10 .stringz "\r\nNon-access ITLB Miss\r\n"Str11 .stringz "\r\nNon-access DTLB Miss\r\n"Str12 .stringz "\r\nData Memory Protection Trap\r\n"Str13 .stringz "\r\nData Memory Break\r\n"Str14 .stringz "\r\nTLB Dirty Bit Trap\r\n"Str15 .stringz "\r\nPage Reference Trap\r\n"Str16 .stringz "\r\nAssist Emulation Trap\r\n"Str17 .stringz "\r\nHigher-privilege Trap\r\n"Str18 .stringz "\r\nLower-privilege Trap\r\n"Str19 .stringz "\r\nTaken Branch Trap\r\n"Str20 .stringz "\r\nHere I am!\r\n"PrintLabels#ifdef PRINT_SPACE .byte 10 .stringz "sr 0 = 0x" .byte 13 .stringz "sr 1 = 0x" .byte 13 .stringz "sr 2 = 0x" .byte 13 .stringz " sr 3 = 0x" .byte 12 .stringz "\r\nsr 4 = 0x" .byte 13 .stringz " sr 5 = 0x" .byte 13 .stringz " sr 6 = 0x" .byte 13 .stringz " sr 7 = 0x" .byte 13 .stringz "\r\n\ngr 0 = 0x"#else .byte 10 .stringz "gr 0 = 0x"#endif .byte 13 .stringz " gr 1 = 0x" .byte 13 .stringz " gr 2 = 0x" .byte 13 .stringz " gr 3 = 0x" .byte 12 .stringz "\r\ngr 4 = 0x" .byte 13 .stringz " gr 5 = 0x" .byte 13 .stringz " gr 6 = 0x" .byte 13 .stringz " gr 7 = 0x" .byte 12 .stringz "\r\ngr 8 = 0x" .byte 13 .stringz " gr 9 = 0x" .byte 13 .stringz " gr10 = 0x" .byte 13 .stringz " gr11 = 0x" .byte 12 .stringz "\r\ngr12 = 0x" .byte 13 .stringz " gr13 = 0x" .byte 13 .stringz " gr14 = 0x" .byte 13 .stringz " gr15 = 0x" .byte 12 .stringz "\r\ngr16 = 0x" .byte 13 .stringz " gr17 = 0x" .byte 13 .stringz " gr18 = 0x" .byte 13 .stringz " gr19 = 0x" .byte 12 .stringz "\r\ngr20 = 0x" .byte 13 .stringz " gr21 = 0x" .byte 13 .stringz " gr22 = 0x" .byte 13 .stringz " gr23 = 0x" .byte 12 .stringz "\r\ngr24 = 0x" .byte 13 .stringz " gr25 = 0x" .byte 13 .stringz " gr26 = 0x" .byte 13 .stringz " gr27 = 0x" .byte 12 .stringz "\r\ngr28 = 0x" .byte 13 .stringz " gr29 = 0x" .byte 13 .stringz " gr30 = 0x" .byte 13 .stringz " gr31 = 0x" .byte 13 .stringz "\r\n\nrctr = 0x" .byte 53 .stringz " cpu0 = 0x" .byte 12 .stringz "\r\npid1 = 0x" .byte 13 .stringz " pid2 = 0x" .byte 13 .stringz " ccr = 0x" .byte 13 .stringz " sar = 0x" .byte 12 .stringz "\r\npid3 = 0x" .byte 13 .stringz " pid4 = 0x" .byte 13 .stringz " iva = 0x" .byte 13 .stringz " eiem = 0x" .byte 12 .stringz "\r\nitmr = 0x" .byte 13 .stringz " iasq = 0x" .byte 13 .stringz " iaoq = 0x" .byte 13 .stringz " iir = 0x" .byte 32 .stringz "\r\n iasq = 0x" .byte 13 .stringz " iaoq = 0x" .byte 12 .stringz "\r\n isr = 0x" .byte 13 .stringz " ior = 0x" .byte 13 .stringz " ipsw = 0x" .byte 13 .stringz " eirr = 0x" .byte 12 .stringz "\r\ncr24 = 0x" .byte 13 .stringz " cr25 = 0x" .byte 13 .stringz " cr26 = 0x" .byte 13 .stringz " cr27 = 0x" .byte 12 .stringz "\r\ncr28 = 0x" .byte 13 .stringz " cr29 = 0x" .byte 13 .stringz " cr30 = 0x" .byte 13 .stringz " cr31 = 0x" .byte 4 .stringz "\r\n\n" .end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -