📄 regtest.s
字号:
.text .align 4 .global _regtest, regtest .proc 04_regtest:regtest:#ifndef _FLAT save %sp, -96, %sp#endif/* set PREGS, %l0 ld [%l0 + ECTRL], %g2 ! get configuration status srl %g2, RFE_CONF_BIT, %g3 andcc %g3, 3, %g3 be 1f nop mov %asr16, %g4 ! skip EDAC test if err-injection is on andcc %g4, 0xe00, %g4 bne 1f subcc %g3, 3, %g0 mov 0x6, %l1 be,a 2f mov 0x32, %l12: mov %l1, %asr16 ! regfile EDAC test mode enable mov %g0, %l3 mov %g0, %asr16 or %l3, 0, %l4 mov %asr16, %l5 or %l3, 0, %l6 mov %asr16, %l7 subcc %l4, 0, %g0 ! %l4 should be zero bne err1 andcc %l5, 0xe00, %l5 ! data-forwarding should not trigger EDAC error subcc %l5, %g0, %g0 bne err1 subcc %l6, 0, %g0 ! %l6 should be 0 (corrected) bne err1 and %l7, 0xe00, %l7 subcc %l7, 0x200, %g0 ! error counter should be incremented bne err1 nop mov %g0, %l0 ! correctable EDAC error in LD mov %l1, %asr16 mov %g0, %l3 mov %g0, %asr16 ldd [%g0], %l4 mov %g0, %l6 mov %g0, %l7 ld [%l3], %l6 ld [%l3 + 4], %l7 cmp %l4, %l6 bne err1 cmp %l5, %l7 bne err1 nop mov %asr16, %l2 and %l2, 0xe00, %l2 subcc %l2, 0x200, %g0 ! error counter should be incremented bne err1 nop mov %g0, %l0 ! 2 correctable EDAC errors in LD mov %l1, %asr16 mov %g0, %l2 mov %g0, %l3 mov %g0, %asr16 ldd [%g0], %l4 mov %g0, %l6 mov %g0, %l7 ld [%l3 + %l2], %l6 ld [%l3 + 4], %l7 cmp %l4, %l6 bne err1 cmp %l5, %l7 bne err1 nop mov %asr16, %l2 and %l2, 0xe00, %l2 subcc %l2, 0x200, %g0 ! error counter should be incremented bl err1 nop set 0x40000000, %l0 ! 4 correctable EDAC errors in STD ldd [%l0], %l6 set 0x41000000, %l0 mov %l1, %asr16 mov %l0, %l2 mov %g0, %l3 mov %g0, %l6 mov %g0, %l7 mov %g0, %asr16 std %l6, [%l2 + %l3] mov %g0, %l6 mov %g0, %l7 ldd [%l3 + %l2], %l4 cmp %l4, %l6 bne err1 cmp %l5, %l7 bne err1 nop mov %asr16, %l2 and %l2, 0xe00, %l2 subcc %l2, 0x400, %g0 ! error counter should be incremented ble err1 nop ba 1f noperr1: ba last mov %g0, %i0 */ ! flush all register windows (maximum 32)1: mov %asr17, %g5 and %g5, 0x1f, %g5 subcc %g5, 1, %g0 be 4f mov %g5, %g62: save %sp, -96, %sp subcc %g5, 1, %g5 bge 2b nop3: restore subcc %g6, 1, %g6 bge 3b nop ! save global and input registers4: nop; nop set regbuf, %l0 mov %psr, %l1 st %l1, [%l0] st %g1, [%l0+4] std %g2, [%l0+8] std %g4, [%l0+16] std %g6, [%l0+24] std %i0, [%l0+32] std %i2, [%l0+40] std %i4, [%l0+48] std %i6, [%l0+56] std %o0, [%l0+64] std %o2, [%l0+72] std %o4, [%l0+80] std %o6, [%l0+88] mov %wim, %l2 st %l2, [%l0+96] ! test gloabal registers mov 8, %g0 mov 1, %g1 mov 2, %g2 mov 3, %g3 mov 4, %g4 mov 5, %g5 mov 6, %g6 mov 7, %g7 mov %g0, %wim andn %l1, 0x1f, %l2 mov %l2, %psr nop; nop; nop ! fill all registers set 0x01010101, %g1 mov %g0, %g2 mov %g0, %g3 mov %asr17, %g4 and %g4, 0x1f, %g4 mov %g4, %g34: mov %g2, %l0 add %g1, %g2, %g2 mov %g2, %l1 add %g1, %g2, %g2 mov %g2, %l2 add %g1, %g2, %g2 mov %g2, %l3 add %g1, %g2, %g2 mov %g2, %l4 add %g1, %g2, %g2 mov %g2, %l5 add %g1, %g2, %g2 mov %g2, %l6 add %g1, %g2, %g2 mov %g2, %l7 add %g1, %g2, %g2 mov %g2, %o0 add %g1, %g2, %g2 mov %g2, %o1 add %g1, %g2, %g2 mov %g2, %o2 add %g1, %g2, %g2 mov %g2, %o3 add %g1, %g2, %g2 mov %g2, %o4 add %g1, %g2, %g2 mov %g2, %o5 add %g1, %g2, %g2 mov %g2, %o6 add %g1, %g2, %g2 mov %g2, %o7 add %g1, %g2, %g2 save subcc %g3, 1, %g3 bge 4b nop ! check values set 0x01010101, %g1 mov %g0, %g2 mov %g4, %g35: cmp %l0, %g2 bne fail add %g1, %g2, %g2 cmp %l1, %g2 bne fail add %g1, %g2, %g2 cmp %l2, %g2 bne fail add %g1, %g2, %g2 cmp %l3, %g2 bne fail add %g1, %g2, %g2 cmp %l4, %g2 bne fail add %g1, %g2, %g2 cmp %l5, %g2 bne fail add %g1, %g2, %g2 cmp %l6, %g2 bne fail add %g1, %g2, %g2 cmp %l7, %g2 bne fail add %g1, %g2, %g2 cmp %o0, %g2 bne fail add %g1, %g2, %g2 cmp %o1, %g2 bne fail add %g1, %g2, %g2 cmp %o2, %g2 bne fail add %g1, %g2, %g2 cmp %o3, %g2 bne fail add %g1, %g2, %g2 cmp %o4, %g2 bne fail add %g1, %g2, %g2 cmp %o5, %g2 bne fail add %g1, %g2, %g2 cmp %o6, %g2 bne fail add %g1, %g2, %g2 cmp %o7, %g2 bne fail add %g1, %g2, %g2 save subcc %g3, 1, %g3 bge 5b nop subcc %g0, 0, %g0 bne fail subcc %g3, -1, %g0 bne fail subcc %g5, 5, %g0 bne fail subcc %g6, 6, %g0 bne fail subcc %g7, 7, %g0 bne fail noptestok: set regbuf, %l0 ba exit st %g0, [%l0+32]fail: set regbuf, %l0 mov 1, %o0 ba exit st %o0, [%l0+32]exit: ! restore state set regbuf, %g1 ld [%g1], %g2 mov %g2, %psr nop; nop; nop ldd [%g1+8], %g2 ldd [%g1+16], %g4 ldd [%g1+24], %g6 ldd [%g1+32], %i0 ldd [%g1+40], %i2 ldd [%g1+48], %i4 ldd [%g1+56], %i6 ldd [%g1+64], %o0 ldd [%g1+72], %o2 ldd [%g1+80], %o4 ldd [%g1+88], %o6 ld [%g1+96], %l2 ld [%g1+4], %g1 mov %l2, %wim nop; nop; noplast: set regbuf, %l0#ifndef _FLAT ld [%l0+32], %i0 ret restore#else retl ld [%l0+32], %o0#endif .align 8.common regbuf, 168,"bss".align 32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -