@@ -95,7 +95,7 @@ Assumed pipeline implementation:
95
95
1 stall:
96
96
LOAD instrs that write to a reg-required-by-next-instr after reading from mem:
97
97
...EX of next instr needs reg data from MA of LOAD instrs.
98
- BRANCH instrs test for (in)equality in ID, dependent on previous instr:
98
+ BRANCH instrs test for (in)equality in ID which is dependent on previous instr:
99
99
...ID of BRANCH instr needs reg data from EX of previous instr.
100
100
2 stalls:
101
101
LOAD instr followed by dependent BRANCH instr:
@@ -634,17 +634,23 @@ riscvstep(Engine *E, State *S, int drain_pipeline)
634
634
(tmp&maskExtractBit20) >> 20,
635
635
(tmp&maskExtractBits12to19) >> 12,
636
636
(tmp&maskExtractBit31) >> 31);
637
- S->dyncnt++; */
637
+ S->dyncnt++;
638
+
638
639
S->riscv->instruction_distribution[S->riscv->P.EX.op]++;
640
+ */
641
+
639
642
break ;
640
643
}
641
644
642
645
case INSTR_R4 :
643
646
{
644
- instr_r4 * tmp ;
645
-
646
- tmp = (instr_r4 * )& S -> riscv -> P .EX .instr ;
647
- (* (S -> riscv -> P .EX .fptr ))(E , S , tmp -> rs1 , tmp -> rs2 , tmp -> rs3 , tmp -> rm , tmp -> rd );
647
+ uint32_t tmp = S -> riscv -> P .EX .instr ;
648
+ (* (S -> riscv -> P .EX .fptr ))(E , S ,
649
+ (tmp & maskExtractBits15to19 ) >> 15 ,
650
+ (tmp & maskExtractBits20to24 ) >> 20 ,
651
+ (tmp & maskExtractBits27to31 ) >> 27 ,
652
+ (tmp & maskExtractBits12to14 ) >> 12 ,
653
+ (tmp & maskExtractBits7to11 ) >> 7 );
648
654
break ;
649
655
}
650
656
@@ -750,7 +756,6 @@ riscvstep(Engine *E, State *S, int drain_pipeline)
750
756
(tmp & maskExtractBit20 ) >> 20 ,
751
757
(tmp & maskExtractBits12to19 ) >> 12 ,
752
758
(tmp & maskExtractBit31 ) >> 31 );
753
- S -> riscv -> instruction_distribution [S -> riscv -> P .ID .op ]++ ;
754
759
}
755
760
else
756
761
{
@@ -762,8 +767,8 @@ riscvstep(Engine *E, State *S, int drain_pipeline)
762
767
(tmp & maskExtractBits25to30 ) >> 25 ,
763
768
(tmp & maskExtractBit7 ) >> 7 ,
764
769
(tmp & maskExtractBit31 ) >> 31 );
765
- S -> riscv -> instruction_distribution [S -> riscv -> P .ID .op ]++ ;
766
770
}
771
+ S -> riscv -> instruction_distribution [S -> riscv -> P .ID .op ]++ ;
767
772
S -> dyncnt ++ ;
768
773
riscvIFflush (S );
769
774
}
0 commit comments