mirror of
https://github.com/openhwgroup/cvw
synced 2025-01-24 05:24:49 +00:00
148 lines
2.5 KiB
ArmAsm
148 lines
2.5 KiB
ArmAsm
|
.section .text
|
||
|
.global enablePerfCnt
|
||
|
.type enablePerfCnt, @function
|
||
|
enablePerfCnt:
|
||
|
# a0 is the mask
|
||
|
csrrc x0, 0x320, a0 # clear bits to disable inhibit register
|
||
|
ret
|
||
|
|
||
|
.section .text
|
||
|
.global disablePerfCnt
|
||
|
.type disablePerfCnt, @function
|
||
|
disablePerfCnt:
|
||
|
# a0 is the mask
|
||
|
csrrs x0, 0x320, a0 # set bits to disable inhibit register
|
||
|
ret
|
||
|
|
||
|
|
||
|
.section .text
|
||
|
.global readPerfCnt
|
||
|
.type readPerfCnt, @function
|
||
|
readPerfCnt:
|
||
|
# a0 is the counter to read
|
||
|
# a1 is the flag to clear the register
|
||
|
# return the value of the counter in a0
|
||
|
|
||
|
li t0, 0xB
|
||
|
# if the counter number is greater than the number
|
||
|
# of counters return a -1
|
||
|
bge a0, t0, readPerfCntError
|
||
|
|
||
|
# pointers are 8 bytes so shift a0 by 8
|
||
|
slli a0, a0, 3
|
||
|
li t1, 1
|
||
|
beq a1, t1, readPerfCntClear
|
||
|
|
||
|
la t0, csrTable
|
||
|
j skip
|
||
|
|
||
|
readPerfCntClear:
|
||
|
la t0, csrTable_clear
|
||
|
|
||
|
skip:
|
||
|
add t0, t0, a0
|
||
|
ld t0, 0(t0)
|
||
|
jr t0
|
||
|
|
||
|
csrCycle:
|
||
|
csrrs a0, 0xB00, x0
|
||
|
ret
|
||
|
csrNull:
|
||
|
li a0, -1
|
||
|
ret
|
||
|
csrInstrCount:
|
||
|
csrrs a0, 0xB02, x0
|
||
|
ret
|
||
|
csrLoadStallCount:
|
||
|
csrrs a0, 0xB03, x0
|
||
|
ret
|
||
|
csrBPWrongCount:
|
||
|
csrrs a0, 0xB04, x0
|
||
|
ret
|
||
|
csrBPCount:
|
||
|
csrrs a0, 0xB05, x0
|
||
|
ret
|
||
|
csrBTBWrongCount:
|
||
|
csrrs a0, 0xB06, x0
|
||
|
ret
|
||
|
csrNonBRCFICount:
|
||
|
csrrs a0, 0xB07, x0
|
||
|
ret
|
||
|
csrRasWrongCount:
|
||
|
csrrs a0, 0xB08, x0
|
||
|
ret
|
||
|
csrReturnCount:
|
||
|
csrrs a0, 0xB09, x0
|
||
|
ret
|
||
|
csrBTBClassWrongCount:
|
||
|
csrrs a0, 0xB0A, x0
|
||
|
ret
|
||
|
|
||
|
csrCycle_clear:
|
||
|
csrrw a0, 0xB00, x0
|
||
|
ret
|
||
|
csrNull_clear:
|
||
|
li a0, -1
|
||
|
ret
|
||
|
csrInstrCount_clear:
|
||
|
csrrw a0, 0xB02, x0
|
||
|
ret
|
||
|
csrLoadStallCount_clear:
|
||
|
csrrw a0, 0xB03, x0
|
||
|
ret
|
||
|
csrBPWrongCount_clear:
|
||
|
csrrw a0, 0xB04, x0
|
||
|
ret
|
||
|
csrBPCount_clear:
|
||
|
csrrw a0, 0xB05, x0
|
||
|
ret
|
||
|
csrBTBWrongCount_clear:
|
||
|
csrrw a0, 0xB06, x0
|
||
|
ret
|
||
|
csrNonBRCFICount_clear:
|
||
|
csrrw a0, 0xB07, x0
|
||
|
ret
|
||
|
csrRasWrongCount_clear:
|
||
|
csrrw a0, 0xB08, x0
|
||
|
ret
|
||
|
csrReturnCount_clear:
|
||
|
csrrw a0, 0xB09, x0
|
||
|
ret
|
||
|
csrBTBClassWrongCount_clear:
|
||
|
csrrw a0, 0xB0A, x0
|
||
|
ret
|
||
|
|
||
|
readPerfCntError:
|
||
|
li a0, -1
|
||
|
ret
|
||
|
|
||
|
|
||
|
.section .data
|
||
|
.align 3
|
||
|
csrTable:
|
||
|
.8byte csrCycle #0
|
||
|
.8byte csrNull #1
|
||
|
.8byte csrInstrCount #2
|
||
|
.8byte csrLoadStallCount #3
|
||
|
.8byte csrBPWrongCount #4
|
||
|
.8byte csrBPCount #5
|
||
|
.8byte csrBTBWrongCount #6
|
||
|
.8byte csrNonBRCFICount #7
|
||
|
.8byte csrRasWrongCount #8
|
||
|
.8byte csrReturnCount #9
|
||
|
.8byte csrBTBClassWrongCount #A
|
||
|
|
||
|
csrTable_clear:
|
||
|
.8byte csrCycle_clear #0
|
||
|
.8byte csrNull_clear #1
|
||
|
.8byte csrInstrCount_clear #2
|
||
|
.8byte csrLoadStallCount_clear #3
|
||
|
.8byte csrBPWrongCount_clear #4
|
||
|
.8byte csrBPCount_clear #5
|
||
|
.8byte csrBTBWrongCount_clear #6
|
||
|
.8byte csrNonBRCFICount_clear #7
|
||
|
.8byte csrRasWrongCount_clear #8
|
||
|
.8byte csrReturnCount_clear #9
|
||
|
.8byte csrBTBClassWrongCount_clear #A
|
||
|
|