On Thu, Oct 10, 2013 at 11:59 PM, Julius Baxter <[email protected]>wrote:
> On Tue, Oct 8, 2013 at 9:01 AM, Olof Kindgren <[email protected]> > wrote: > > This patch fixes bug 97 > > > > Instead of throwing an illegal instruction exception when the rotate > > instructions are disabled (OR1200_ALU_IMPL_ROTATE is undefined), another > > instruction (slr?) is executed instead. > > > > Not sure if GCC emits l.rori instructions and none of our testcases > seems to > > exercise it either, which might be the reason why this hasn't been > detected > > before. I created a new testcase to check the l.rori instructions, and > added > > it to the bug report until we have a common tests repository. > > Hi Olof > > Good catch here. > > > > > With the old code I get these results: > > > > --OR1200_IMPL_ALU_ROTATE undefined: > > report(0x00000007); > > exit(7) > > > > --OR1200_IMPL_ALU_ROTATE defined: > > report(0x80000003); > > exit(0) > > > > --OR1200_IMPL_ALU_ROTATE undefined: > > > > Illegal instruction! > > exit(10) > > > > --OR1200_IMPL_ALU_ROTATE defined: > > report(0x80000003); > > exit(0) > > This looks great. > > > > > > > > > > > Index: rtl/verilog/or1200_ctrl.v > > =================================================================== > > > > --- rtl/verilog/or1200_ctrl.v (revision 852) > > +++ rtl/verilog/or1200_ctrl.v (working copy) > > @@ -698,7 +698,9 @@ > > `ifdef OR1200_MULT_IMPLEMENTED > > `OR1200_OR32_MULI, > > `endif > > +`ifdef OR1200_IMPL_ALU_ROTATE > > > > `OR1200_OR32_SH_ROTI, > > +`endif > > `OR1200_OR32_SFXXI, > > `OR1200_OR32_MTSPR, > > `ifdef OR1200_MAC_IMPLEMENTED > > @@ -810,11 +812,11 @@ > > `OR1200_OR32_MULI: > > > > alu_op <= `OR1200_ALUOP_MUL; > > `endif > > - > > +`ifdef OR1200_IMPL_ALU_ROTATE > > // Shift and rotate insns with immediate > > `OR1200_OR32_SH_ROTI: > > alu_op <= `OR1200_ALUOP_SHROT; > > > > - > > +`endif > > // SFXX insns with immediate > > `OR1200_OR32_SFXXI: > > alu_op <= `OR1200_ALUOP_COMP; > > @@ -1008,9 +1010,10 @@ > > `endif > > > > // Shift and rotate insns with immediate > > > > +`ifdef OR1200_IMPL_ALU_ROTATE > > `OR1200_OR32_SH_ROTI: > > rfwb_op <= {`OR1200_RFWBOP_ALU, 1'b1}; > > - > > +`endif > > // ALU instructions except the one with immediate > > > > `OR1200_OR32_ALU: > > rfwb_op <= {`OR1200_RFWBOP_ALU, 1'b1}; > > > > > > Yep, all good with me. > > Cheers > > Julius > Applied in rev 865 //Olof
_______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
