@@ -567,13 +567,13 @@ static bool emulate(riscv_t *rv, const block_t *block)
567567 * bits of the result. ADDI rd, rs1, 0 is used to implement the MV rd, rs1
568568 * assembler pseudo-instruction.
569569 */
570- _ (addi , rv -> X [ir -> rd ] = (int32_t ) (rv -> X [ir -> rs1 ]) + ir -> imm ;)
570+ _ (addi , rv -> X [ir -> rd ] = (int32_t )(rv -> X [ir -> rs1 ]) + ir -> imm ;)
571571
572572 /* SLTI (Set on Less Than Immediate) places the value 1 in register rd if
573573 * register rs1 is less than the signextended immediate when both are
574574 * treated as signed numbers, else 0 is written to rd.
575575 */
576- _ (slti , rv -> X [ir -> rd ] = ((int32_t ) (rv -> X [ir -> rs1 ]) < ir -> imm ) ? 1 : 0 ;)
576+ _ (slti , rv -> X [ir -> rd ] = ((int32_t )(rv -> X [ir -> rs1 ]) < ir -> imm ) ? 1 : 0 ;)
577577
578578 /* SLTIU (Set on Less Than Immediate Unsigned) places the value 1 in
579579 * register rd if register rs1 is less than the immediate when both are
@@ -612,19 +612,19 @@ static bool emulate(riscv_t *rv, const block_t *block)
612612
613613 /* ADD */
614614 _ (add ,
615- rv -> X [ir -> rd ] = (int32_t ) (rv -> X [ir -> rs1 ]) + (int32_t ) (rv -> X [ir -> rs2 ]);)
615+ rv -> X [ir -> rd ] = (int32_t )(rv -> X [ir -> rs1 ]) + (int32_t )(rv -> X [ir -> rs2 ]);)
616616
617617 /* SUB: Substract */
618618 _ (sub ,
619- rv -> X [ir -> rd ] = (int32_t ) (rv -> X [ir -> rs1 ]) - (int32_t ) (rv -> X [ir -> rs2 ]);)
619+ rv -> X [ir -> rd ] = (int32_t )(rv -> X [ir -> rs1 ]) - (int32_t )(rv -> X [ir -> rs2 ]);)
620620
621621 /* SLL: Shift Left Logical */
622622 _ (sll , rv -> X [ir -> rd ] = rv -> X [ir -> rs1 ] << (rv -> X [ir -> rs2 ] & 0x1f );)
623623
624624 /* SLT: Set on Less Than */
625625 _ (slt , {
626626 rv -> X [ir -> rd ] =
627- ((int32_t ) (rv -> X [ir -> rs1 ]) < (int32_t ) (rv -> X [ir -> rs2 ])) ? 1 : 0 ;
627+ ((int32_t )(rv -> X [ir -> rs1 ]) < (int32_t )(rv -> X [ir -> rs2 ])) ? 1 : 0 ;
628628 })
629629
630630 /* SLTU: Set on Less Than Unsigned */
@@ -649,13 +649,15 @@ static bool emulate(riscv_t *rv, const block_t *block)
649649
650650 /* ECALL: Environment Call */
651651 _ (ecall , {
652+ rv -> compressed = false;
652653 rv -> io .on_ecall (rv ); /* increment the cycles csr */
653654 rv -> csr_cycle ++ ;
654655 return true;
655656 })
656657
657658 /* EBREAK: Environment Break */
658659 _ (ebreak , {
660+ rv -> compressed = false;
659661 rv -> io .on_ebreak (rv ); /* increment the cycles csr */
660662 rv -> csr_cycle ++ ;
661663 return true;
@@ -737,14 +739,14 @@ static bool emulate(riscv_t *rv, const block_t *block)
737739 _ (mulh , {
738740 const int64_t a = (int32_t ) rv -> X [ir -> rs1 ];
739741 const int64_t b = (int32_t ) rv -> X [ir -> rs2 ];
740- rv -> X [ir -> rd ] = ((uint64_t ) (a * b )) >> 32 ;
742+ rv -> X [ir -> rd ] = ((uint64_t )(a * b )) >> 32 ;
741743 })
742744
743745 /* MULHSU: Multiply High Signed Unsigned */
744746 _ (mulhsu , {
745747 const int64_t a = (int32_t ) rv -> X [ir -> rs1 ];
746748 const uint64_t b = rv -> X [ir -> rs2 ];
747- rv -> X [ir -> rd ] = ((uint64_t ) (a * b )) >> 32 ;
749+ rv -> X [ir -> rd ] = ((uint64_t )(a * b )) >> 32 ;
748750 })
749751
750752 /* MULHU: Multiply High Unsigned Unsigned */
@@ -757,10 +759,11 @@ static bool emulate(riscv_t *rv, const block_t *block)
757759 _ (div , {
758760 const int32_t dividend = (int32_t ) rv -> X [ir -> rs1 ];
759761 const int32_t divisor = (int32_t ) rv -> X [ir -> rs2 ];
760- rv -> X [ir -> rd ] = !divisor ? ~0U
761- : (divisor == -1 && rv -> X [ir -> rs1 ] == 0x80000000U )
762- ? rv -> X [ir -> rs1 ] /* overflow */
763- : (unsigned int ) (dividend / divisor );
762+ rv -> X [ir -> rd ] = !divisor
763+ ? ~0U
764+ : (divisor == -1 && rv -> X [ir -> rs1 ] == 0x80000000U )
765+ ? rv -> X [ir -> rs1 ] /* overflow */
766+ : (unsigned int ) (dividend / divisor );
764767 })
765768
766769 /* DIVU: Divide Unsigned */
@@ -774,10 +777,11 @@ static bool emulate(riscv_t *rv, const block_t *block)
774777 _ (rem , {
775778 const int32_t dividend = rv -> X [ir -> rs1 ];
776779 const int32_t divisor = rv -> X [ir -> rs2 ];
777- rv -> X [ir -> rd ] = !divisor ? dividend
778- : (divisor == -1 && rv -> X [ir -> rs1 ] == 0x80000000U )
779- ? 0 /* overflow */
780- : (dividend % divisor );
780+ rv -> X [ir -> rd ] = !divisor
781+ ? dividend
782+ : (divisor == -1 && rv -> X [ir -> rs1 ] == 0x80000000U )
783+ ? 0 /* overflow */
784+ : (dividend % divisor );
781785 })
782786
783787 /* REMU: Remainder Unsigned */
@@ -1288,6 +1292,7 @@ static bool emulate(riscv_t *rv, const block_t *block)
12881292
12891293 /* C.EBREAK */
12901294 _ (cebreak , {
1295+ rv -> compressed = true;
12911296 rv -> io .on_ebreak (rv );
12921297 /* increment the cycles csr */
12931298 rv -> csr_cycle ++ ;
0 commit comments