adds dynamic cycle estimation
This commit is contained in:
parent
b7478965ab
commit
b86d7a517d
|
@ -27,84 +27,84 @@ RV32I:
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BEQ:
|
BEQ:
|
||||||
index: 4
|
index: 4
|
||||||
encoding: 0b00000000000000000000000001100011
|
encoding: 0b00000000000000000000000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BNE:
|
BNE:
|
||||||
index: 5
|
index: 5
|
||||||
encoding: 0b00000000000000000001000001100011
|
encoding: 0b00000000000000000001000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BLT:
|
BLT:
|
||||||
index: 6
|
index: 6
|
||||||
encoding: 0b00000000000000000100000001100011
|
encoding: 0b00000000000000000100000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BGE:
|
BGE:
|
||||||
index: 7
|
index: 7
|
||||||
encoding: 0b00000000000000000101000001100011
|
encoding: 0b00000000000000000101000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BLTU:
|
BLTU:
|
||||||
index: 8
|
index: 8
|
||||||
encoding: 0b00000000000000000110000001100011
|
encoding: 0b00000000000000000110000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
BGEU:
|
BGEU:
|
||||||
index: 9
|
index: 9
|
||||||
encoding: 0b00000000000000000111000001100011
|
encoding: 0b00000000000000000111000001100011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
LB:
|
LB:
|
||||||
index: 10
|
index: 10
|
||||||
encoding: 0b00000000000000000000000000000011
|
encoding: 0b00000000000000000000000000000011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
LH:
|
LH:
|
||||||
index: 11
|
index: 11
|
||||||
encoding: 0b00000000000000000001000000000011
|
encoding: 0b00000000000000000001000000000011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
LW:
|
LW:
|
||||||
index: 12
|
index: 12
|
||||||
encoding: 0b00000000000000000010000000000011
|
encoding: 0b00000000000000000010000000000011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
LBU:
|
LBU:
|
||||||
index: 13
|
index: 13
|
||||||
encoding: 0b00000000000000000100000000000011
|
encoding: 0b00000000000000000100000000000011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
LHU:
|
LHU:
|
||||||
index: 14
|
index: 14
|
||||||
encoding: 0b00000000000000000101000000000011
|
encoding: 0b00000000000000000101000000000011
|
||||||
mask: 0b00000000000000000111000001111111
|
mask: 0b00000000000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
SB:
|
SB:
|
||||||
index: 15
|
index: 15
|
||||||
encoding: 0b00000000000000000000000000100011
|
encoding: 0b00000000000000000000000000100011
|
||||||
|
@ -356,56 +356,56 @@ RV32M:
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
MULH:
|
MULH:
|
||||||
index: 50
|
index: 50
|
||||||
encoding: 0b00000010000000000001000000110011
|
encoding: 0b00000010000000000001000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
MULHSU:
|
MULHSU:
|
||||||
index: 51
|
index: 51
|
||||||
encoding: 0b00000010000000000010000000110011
|
encoding: 0b00000010000000000010000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
MULHU:
|
MULHU:
|
||||||
index: 52
|
index: 52
|
||||||
encoding: 0b00000010000000000011000000110011
|
encoding: 0b00000010000000000011000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
DIV:
|
DIV:
|
||||||
index: 53
|
index: 53
|
||||||
encoding: 0b00000010000000000100000000110011
|
encoding: 0b00000010000000000100000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 17
|
||||||
DIVU:
|
DIVU:
|
||||||
index: 54
|
index: 54
|
||||||
encoding: 0b00000010000000000101000000110011
|
encoding: 0b00000010000000000101000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 17
|
||||||
REM:
|
REM:
|
||||||
index: 55
|
index: 55
|
||||||
encoding: 0b00000010000000000110000000110011
|
encoding: 0b00000010000000000110000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 17
|
||||||
REMU:
|
REMU:
|
||||||
index: 56
|
index: 56
|
||||||
encoding: 0b00000010000000000111000000110011
|
encoding: 0b00000010000000000111000000110011
|
||||||
mask: 0b11111110000000000111000001111111
|
mask: 0b11111110000000000111000001111111
|
||||||
size: 32
|
size: 32
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 17
|
||||||
Zca:
|
Zca:
|
||||||
C__ADDI4SPN:
|
C__ADDI4SPN:
|
||||||
index: 57
|
index: 57
|
||||||
|
@ -420,7 +420,7 @@ Zca:
|
||||||
mask: 0b1110000000000011
|
mask: 0b1110000000000011
|
||||||
size: 16
|
size: 16
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
C__SW:
|
C__SW:
|
||||||
index: 59
|
index: 59
|
||||||
encoding: 0b1100000000000000
|
encoding: 0b1100000000000000
|
||||||
|
@ -542,14 +542,14 @@ Zca:
|
||||||
mask: 0b1110000000000011
|
mask: 0b1110000000000011
|
||||||
size: 16
|
size: 16
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
C__BNEZ:
|
C__BNEZ:
|
||||||
index: 76
|
index: 76
|
||||||
encoding: 0b1110000000000001
|
encoding: 0b1110000000000001
|
||||||
mask: 0b1110000000000011
|
mask: 0b1110000000000011
|
||||||
size: 16
|
size: 16
|
||||||
branch: true
|
branch: true
|
||||||
delay: [1,1]
|
delay: [1,2]
|
||||||
C__SLLI:
|
C__SLLI:
|
||||||
index: 77
|
index: 77
|
||||||
encoding: 0b0000000000000010
|
encoding: 0b0000000000000010
|
||||||
|
@ -564,7 +564,7 @@ Zca:
|
||||||
mask: 0b1110000000000011
|
mask: 0b1110000000000011
|
||||||
size: 16
|
size: 16
|
||||||
branch: false
|
branch: false
|
||||||
delay: 1
|
delay: 2
|
||||||
C__MV:
|
C__MV:
|
||||||
index: 79
|
index: 79
|
||||||
encoding: 0b1000000000000010
|
encoding: 0b1000000000000010
|
||||||
|
|
|
@ -0,0 +1,624 @@
|
||||||
|
|
||||||
|
RV32I:
|
||||||
|
LUI:
|
||||||
|
index: 0
|
||||||
|
encoding: 0b00000000000000000000000000110111
|
||||||
|
mask: 0b00000000000000000000000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
AUIPC:
|
||||||
|
index: 1
|
||||||
|
encoding: 0b00000000000000000000000000010111
|
||||||
|
mask: 0b00000000000000000000000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
JAL:
|
||||||
|
index: 2
|
||||||
|
encoding: 0b00000000000000000000000001101111
|
||||||
|
mask: 0b00000000000000000000000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: 1
|
||||||
|
JALR:
|
||||||
|
index: 3
|
||||||
|
encoding: 0b00000000000000000000000001100111
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BEQ:
|
||||||
|
index: 4
|
||||||
|
encoding: 0b00000000000000000000000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BNE:
|
||||||
|
index: 5
|
||||||
|
encoding: 0b00000000000000000001000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BLT:
|
||||||
|
index: 6
|
||||||
|
encoding: 0b00000000000000000100000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BGE:
|
||||||
|
index: 7
|
||||||
|
encoding: 0b00000000000000000101000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BLTU:
|
||||||
|
index: 8
|
||||||
|
encoding: 0b00000000000000000110000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
BGEU:
|
||||||
|
index: 9
|
||||||
|
encoding: 0b00000000000000000111000001100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
LB:
|
||||||
|
index: 10
|
||||||
|
encoding: 0b00000000000000000000000000000011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
LH:
|
||||||
|
index: 11
|
||||||
|
encoding: 0b00000000000000000001000000000011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
LW:
|
||||||
|
index: 12
|
||||||
|
encoding: 0b00000000000000000010000000000011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
LBU:
|
||||||
|
index: 13
|
||||||
|
encoding: 0b00000000000000000100000000000011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
LHU:
|
||||||
|
index: 14
|
||||||
|
encoding: 0b00000000000000000101000000000011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
SB:
|
||||||
|
index: 15
|
||||||
|
encoding: 0b00000000000000000000000000100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SH:
|
||||||
|
index: 16
|
||||||
|
encoding: 0b00000000000000000001000000100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SW:
|
||||||
|
index: 17
|
||||||
|
encoding: 0b00000000000000000010000000100011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
ADDI:
|
||||||
|
index: 18
|
||||||
|
encoding: 0b00000000000000000000000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SLTI:
|
||||||
|
index: 19
|
||||||
|
encoding: 0b00000000000000000010000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SLTIU:
|
||||||
|
index: 20
|
||||||
|
encoding: 0b00000000000000000011000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
XORI:
|
||||||
|
index: 21
|
||||||
|
encoding: 0b00000000000000000100000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
ORI:
|
||||||
|
index: 22
|
||||||
|
encoding: 0b00000000000000000110000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
ANDI:
|
||||||
|
index: 23
|
||||||
|
encoding: 0b00000000000000000111000000010011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SLLI:
|
||||||
|
index: 24
|
||||||
|
encoding: 0b00000000000000000001000000010011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "u_24:20"
|
||||||
|
SRLI:
|
||||||
|
index: 25
|
||||||
|
encoding: 0b00000000000000000101000000010011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "u_24:20"
|
||||||
|
SRAI:
|
||||||
|
index: 26
|
||||||
|
encoding: 0b01000000000000000101000000010011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "u_24:20"
|
||||||
|
ADD:
|
||||||
|
index: 27
|
||||||
|
encoding: 0b00000000000000000000000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SUB:
|
||||||
|
index: 28
|
||||||
|
encoding: 0b01000000000000000000000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SLL:
|
||||||
|
index: 29
|
||||||
|
encoding: 0b00000000000000000001000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "X_24:20"
|
||||||
|
SLT:
|
||||||
|
index: 30
|
||||||
|
encoding: 0b00000000000000000010000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SLTU:
|
||||||
|
index: 31
|
||||||
|
encoding: 0b00000000000000000011000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
XOR:
|
||||||
|
index: 32
|
||||||
|
encoding: 0b00000000000000000100000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
SRL:
|
||||||
|
index: 33
|
||||||
|
encoding: 0b00000000000000000101000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "X_24:20"
|
||||||
|
SRA:
|
||||||
|
index: 34
|
||||||
|
encoding: 0b01000000000000000101000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: "X_24:20"
|
||||||
|
OR:
|
||||||
|
index: 35
|
||||||
|
encoding: 0b00000000000000000110000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
AND:
|
||||||
|
index: 36
|
||||||
|
encoding: 0b00000000000000000111000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
FENCE:
|
||||||
|
index: 37
|
||||||
|
encoding: 0b00000000000000000000000000001111
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
ECALL:
|
||||||
|
index: 38
|
||||||
|
encoding: 0b00000000000000000000000001110011
|
||||||
|
mask: 0b11111111111111111111111111111111
|
||||||
|
attributes: [[name:no_cont]]
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
EBREAK:
|
||||||
|
index: 39
|
||||||
|
encoding: 0b00000000000100000000000001110011
|
||||||
|
mask: 0b11111111111111111111111111111111
|
||||||
|
attributes: [[name:no_cont]]
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
MRET:
|
||||||
|
index: 40
|
||||||
|
encoding: 0b00110000001000000000000001110011
|
||||||
|
mask: 0b11111111111111111111111111111111
|
||||||
|
attributes: [[name:no_cont]]
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
WFI:
|
||||||
|
index: 41
|
||||||
|
encoding: 0b00010000010100000000000001110011
|
||||||
|
mask: 0b11111111111111111111111111111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
Zicsr:
|
||||||
|
CSRRW:
|
||||||
|
index: 42
|
||||||
|
encoding: 0b00000000000000000001000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
CSRRS:
|
||||||
|
index: 43
|
||||||
|
encoding: 0b00000000000000000010000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
CSRRC:
|
||||||
|
index: 44
|
||||||
|
encoding: 0b00000000000000000011000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
CSRRWI:
|
||||||
|
index: 45
|
||||||
|
encoding: 0b00000000000000000101000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
CSRRSI:
|
||||||
|
index: 46
|
||||||
|
encoding: 0b00000000000000000110000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
CSRRCI:
|
||||||
|
index: 47
|
||||||
|
encoding: 0b00000000000000000111000001110011
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
Zifencei:
|
||||||
|
FENCE_I:
|
||||||
|
index: 48
|
||||||
|
encoding: 0b00000000000000000001000000001111
|
||||||
|
mask: 0b00000000000000000111000001111111
|
||||||
|
attributes: [[name:flush]]
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
RV32M:
|
||||||
|
MUL:
|
||||||
|
index: 49
|
||||||
|
encoding: 0b00000010000000000000000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 32
|
||||||
|
MULH:
|
||||||
|
index: 50
|
||||||
|
encoding: 0b00000010000000000001000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 32
|
||||||
|
MULHSU:
|
||||||
|
index: 51
|
||||||
|
encoding: 0b00000010000000000010000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 32
|
||||||
|
MULHU:
|
||||||
|
index: 52
|
||||||
|
encoding: 0b00000010000000000011000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 32
|
||||||
|
DIV:
|
||||||
|
index: 53
|
||||||
|
encoding: 0b00000010000000000100000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 33
|
||||||
|
DIVU:
|
||||||
|
index: 54
|
||||||
|
encoding: 0b00000010000000000101000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 33
|
||||||
|
REM:
|
||||||
|
index: 55
|
||||||
|
encoding: 0b00000010000000000110000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 33
|
||||||
|
REMU:
|
||||||
|
index: 56
|
||||||
|
encoding: 0b00000010000000000111000000110011
|
||||||
|
mask: 0b11111110000000000111000001111111
|
||||||
|
size: 32
|
||||||
|
branch: false
|
||||||
|
delay: 33
|
||||||
|
Zca:
|
||||||
|
C__ADDI4SPN:
|
||||||
|
index: 57
|
||||||
|
encoding: 0b0000000000000000
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__LW:
|
||||||
|
index: 58
|
||||||
|
encoding: 0b0100000000000000
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
C__SW:
|
||||||
|
index: 59
|
||||||
|
encoding: 0b1100000000000000
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__ADDI:
|
||||||
|
index: 60
|
||||||
|
encoding: 0b0000000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__NOP:
|
||||||
|
index: 61
|
||||||
|
encoding: 0b0000000000000001
|
||||||
|
mask: 0b1110111110000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__JAL:
|
||||||
|
index: 62
|
||||||
|
encoding: 0b0010000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
attributes: [[name:enable, value:1]]
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: 1
|
||||||
|
C__LI:
|
||||||
|
index: 63
|
||||||
|
encoding: 0b0100000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__LUI:
|
||||||
|
index: 64
|
||||||
|
encoding: 0b0110000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__ADDI16SP:
|
||||||
|
index: 65
|
||||||
|
encoding: 0b0110000100000001
|
||||||
|
mask: 0b1110111110000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
__reserved_clui:
|
||||||
|
index: 66
|
||||||
|
encoding: 0b0110000000000001
|
||||||
|
mask: 0b1111000001111111
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__SRLI:
|
||||||
|
index: 67
|
||||||
|
encoding: 0b1000000000000001
|
||||||
|
mask: 0b1111110000000011
|
||||||
|
attributes: [[name:enable, value:1]]
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: "u_12:12*16+u_6:2"
|
||||||
|
C__SRAI:
|
||||||
|
index: 68
|
||||||
|
encoding: 0b1000010000000001
|
||||||
|
mask: 0b1111110000000011
|
||||||
|
attributes: [[name:enable, value:1]]
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: "u_12:12*16+u_6:2"
|
||||||
|
C__ANDI:
|
||||||
|
index: 69
|
||||||
|
encoding: 0b1000100000000001
|
||||||
|
mask: 0b1110110000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__SUB:
|
||||||
|
index: 70
|
||||||
|
encoding: 0b1000110000000001
|
||||||
|
mask: 0b1111110001100011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__XOR:
|
||||||
|
index: 71
|
||||||
|
encoding: 0b1000110000100001
|
||||||
|
mask: 0b1111110001100011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__OR:
|
||||||
|
index: 72
|
||||||
|
encoding: 0b1000110001000001
|
||||||
|
mask: 0b1111110001100011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__AND:
|
||||||
|
index: 73
|
||||||
|
encoding: 0b1000110001100001
|
||||||
|
mask: 0b1111110001100011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__J:
|
||||||
|
index: 74
|
||||||
|
encoding: 0b1010000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: 1
|
||||||
|
C__BEQZ:
|
||||||
|
index: 75
|
||||||
|
encoding: 0b1100000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
C__BNEZ:
|
||||||
|
index: 76
|
||||||
|
encoding: 0b1110000000000001
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: [1,2]
|
||||||
|
C__SLLI:
|
||||||
|
index: 77
|
||||||
|
encoding: 0b0000000000000010
|
||||||
|
mask: 0b1111000000000011
|
||||||
|
attributes: [[name:enable, value:1]]
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: "u_12:12*16+u_6:2"
|
||||||
|
C__LWSP:
|
||||||
|
index: 78
|
||||||
|
encoding: 0b0100000000000010
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 2
|
||||||
|
C__MV:
|
||||||
|
index: 79
|
||||||
|
encoding: 0b1000000000000010
|
||||||
|
mask: 0b1111000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__JR:
|
||||||
|
index: 80
|
||||||
|
encoding: 0b1000000000000010
|
||||||
|
mask: 0b1111000001111111
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: 1
|
||||||
|
__reserved_cmv:
|
||||||
|
index: 81
|
||||||
|
encoding: 0b1000000000000010
|
||||||
|
mask: 0b1111111111111111
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__ADD:
|
||||||
|
index: 82
|
||||||
|
encoding: 0b1001000000000010
|
||||||
|
mask: 0b1111000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__JALR:
|
||||||
|
index: 83
|
||||||
|
encoding: 0b1001000000000010
|
||||||
|
mask: 0b1111000001111111
|
||||||
|
size: 16
|
||||||
|
branch: true
|
||||||
|
delay: 1
|
||||||
|
C__EBREAK:
|
||||||
|
index: 84
|
||||||
|
encoding: 0b1001000000000010
|
||||||
|
mask: 0b1111111111111111
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
C__SWSP:
|
||||||
|
index: 85
|
||||||
|
encoding: 0b1100000000000010
|
||||||
|
mask: 0b1110000000000011
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
DII:
|
||||||
|
index: 86
|
||||||
|
encoding: 0b0000000000000000
|
||||||
|
mask: 0b1111111111111111
|
||||||
|
size: 16
|
||||||
|
branch: false
|
||||||
|
delay: 1
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2017 - 2023, MINRES Technologies GmbH
|
* Copyright (C) 2017 - 2023, MINRES Technologies GmbH
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -34,6 +33,7 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "cycle_estimate.h"
|
#include "cycle_estimate.h"
|
||||||
|
#include <iss/plugin/calculator.h>
|
||||||
#include <yaml-cpp/yaml.h>
|
#include <yaml-cpp/yaml.h>
|
||||||
|
|
||||||
#include <iss/arch_if.h>
|
#include <iss/arch_if.h>
|
||||||
|
@ -48,11 +48,12 @@ iss::plugin::cycle_estimate::cycle_estimate(string const& config_file_name)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
iss::plugin::cycle_estimate::~cycle_estimate() {
|
iss::plugin::cycle_estimate::~cycle_estimate() = default;
|
||||||
}
|
|
||||||
|
|
||||||
bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& vm) {
|
bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& vm) {
|
||||||
instr_if = vm.get_arch()->get_instrumentation_if();
|
instr_if = vm.get_arch()->get_instrumentation_if();
|
||||||
|
assert(instr_if && "No instrumentation interface available but callback executed");
|
||||||
|
reg_base_ptr = reinterpret_cast<uint32_t*>(vm.get_arch()->get_regs_base_ptr());
|
||||||
if(!instr_if) return false;
|
if(!instr_if) return false;
|
||||||
const string core_name = instr_if->core_type_name();
|
const string core_name = instr_if->core_type_name();
|
||||||
if (config_file_name.length() > 0) {
|
if (config_file_name.length() > 0) {
|
||||||
|
@ -67,17 +68,23 @@ bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if&
|
||||||
auto isa_subset = p.first;
|
auto isa_subset = p.first;
|
||||||
auto instructions = p.second;
|
auto instructions = p.second;
|
||||||
for (auto const& instr : instructions) {
|
for (auto const& instr : instructions) {
|
||||||
instr_desc res;
|
auto idx = instr.second["index"].as<unsigned>();
|
||||||
|
if(delays.size()<=idx)
|
||||||
|
delays.resize(idx+1);
|
||||||
|
auto& res = delays[idx];
|
||||||
res.is_branch = instr.second["branch"].as<bool>();
|
res.is_branch = instr.second["branch"].as<bool>();
|
||||||
auto delay = instr.second["delay"];
|
auto delay = instr.second["delay"];
|
||||||
if(delay.IsSequence()) {
|
if(delay.IsSequence()) {
|
||||||
res.not_taken = delay[0].as<uint64_t>();
|
res.not_taken = delay[0].as<uint64_t>();
|
||||||
res.taken = delay[1].as<uint64_t>();
|
res.taken = delay[1].as<uint64_t>();
|
||||||
} else {
|
} else {
|
||||||
res.not_taken = delay.as<uint64_t>();
|
try {
|
||||||
res.taken = res.not_taken;
|
res.not_taken = delay.as<uint64_t>();
|
||||||
|
res.taken = res.not_taken;
|
||||||
|
} catch (const YAML::BadConversion& e) {
|
||||||
|
res.f = iss::plugin::calculator(reg_base_ptr, delay.as<std::string>());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delays.push_back(std::move(res));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (YAML::ParserException &e) {
|
} catch (YAML::ParserException &e) {
|
||||||
|
@ -90,15 +97,18 @@ bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void iss::plugin::cycle_estimate::callback(instr_info_t instr_info) {
|
void iss::plugin::cycle_estimate::callback(instr_info_t instr_info) {
|
||||||
assert(instr_if && "No instrumentation interface available but callback executed");
|
size_t instr_id = instr_info.instr_id;
|
||||||
auto entry = delays[instr_info.instr_id];
|
auto entry = delays[instr_id];
|
||||||
bool taken = instr_if->is_branch_taken();
|
if(instr_info.phase_id==PRE_SYNC) {
|
||||||
if (taken && (entry.taken > 1))
|
if(entry.f)
|
||||||
instr_if->update_last_instr_cycles(entry.taken);
|
current_delay = entry.f(instr_if->get_instr_word());
|
||||||
else if (entry.not_taken > 1)
|
} else {
|
||||||
instr_if->update_last_instr_cycles(entry.not_taken);
|
if(!entry.f)
|
||||||
|
current_delay = instr_if->is_branch_taken()? entry.taken: entry.not_taken;
|
||||||
|
if(current_delay>1)
|
||||||
|
instr_if->update_last_instr_cycles(current_delay);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,24 +40,20 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace iss {
|
namespace iss {
|
||||||
|
|
||||||
namespace plugin {
|
namespace plugin {
|
||||||
|
|
||||||
class cycle_estimate: public vm_plugin {
|
class cycle_estimate: public vm_plugin {
|
||||||
BEGIN_BF_DECL(instr_desc, uint32_t)
|
struct instr_desc {
|
||||||
BF_FIELD(taken, 24, 8)
|
size_t size;
|
||||||
BF_FIELD(not_taken, 16, 8)
|
bool is_branch;
|
||||||
BF_FIELD(is_branch, 8, 8)
|
unsigned not_taken;
|
||||||
BF_FIELD(size, 0, 8)
|
unsigned taken;
|
||||||
instr_desc(uint32_t size, uint32_t taken, uint32_t not_taken, bool branch): instr_desc() {
|
std::function<unsigned(uint64_t)> f;
|
||||||
this->size=size;
|
};
|
||||||
this->taken=taken;
|
|
||||||
this->not_taken=not_taken;
|
|
||||||
this->is_branch=branch;
|
|
||||||
}
|
|
||||||
END_BF_DECL();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
cycle_estimate() = delete;
|
cycle_estimate() = delete;
|
||||||
|
@ -76,13 +72,15 @@ public:
|
||||||
|
|
||||||
bool registration(const char *const version, vm_if &arch) override;
|
bool registration(const char *const version, vm_if &arch) override;
|
||||||
|
|
||||||
sync_type get_sync() override { return POST_SYNC; };
|
sync_type get_sync() override { return ALL_SYNC; };
|
||||||
|
|
||||||
void callback(instr_info_t instr_info) override;
|
void callback(instr_info_t instr_info) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
iss::instrumentation_if *instr_if;
|
iss::instrumentation_if *instr_if{nullptr};
|
||||||
|
uint32_t* reg_base_ptr {nullptr};
|
||||||
std::vector<instr_desc> delays;
|
std::vector<instr_desc> delays;
|
||||||
|
unsigned current_delay{0};
|
||||||
struct pair_hash {
|
struct pair_hash {
|
||||||
size_t operator()(const std::pair<uint64_t, uint64_t> &p) const {
|
size_t operator()(const std::pair<uint64_t, uint64_t> &p) const {
|
||||||
std::hash<uint64_t> hash;
|
std::hash<uint64_t> hash;
|
||||||
|
|
Loading…
Reference in New Issue