diff options
-rw-r--r-- | sim/mips/ChangeLog | 5 | ||||
-rw-r--r-- | sim/mips/sb1.igen | 44 |
2 files changed, 28 insertions, 21 deletions
diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index be4ce2a..a91b137 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,3 +1,8 @@ +2004-04-09 Chris Demetriou <cgd@broadcom.com> + + * sb1.igen (check_sbx): New function. + (PABSDIFF.fmt, PABSDIFC.fmt, PAVG.fmt): Use check_sbx. + 2004-03-29 Chris Demetriou <cgd@broadcom.com> Richard Sandiford <rsandifo@redhat.com> diff --git a/sim/mips/sb1.igen b/sim/mips/sb1.igen index 33c5141..7a718c7 100644 --- a/sim/mips/sb1.igen +++ b/sim/mips/sb1.igen @@ -22,6 +22,20 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Helper: +// +// Check that the SB-1 extension instruction can currently be used, and +// signal a ReservedInstruction exception if not. +// + +:function:::void:check_sbx:instruction_word insn +*sb1: +{ + if ((SR & status_SBX) == 0) + SignalException(ReservedInstruction, insn); +} + + // MDMX ASE Instructions // --------------------- // @@ -152,13 +166,9 @@ *sb1: { check_mdmx (SD_, instruction_0); - if (SR & status_SBX) - { - check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); - StoreFPR(VD,fmt_mdmx,MX_AbsDiff(ValueFPR(VS,fmt_mdmx),VT,FMTSEL)); - } - else - SignalException(ReservedInstruction, instruction_0); + check_sbx (SD_, instruction_0); + check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); + StoreFPR(VD,fmt_mdmx,MX_AbsDiff(ValueFPR(VS,fmt_mdmx),VT,FMTSEL)); } @@ -167,13 +177,9 @@ *sb1: { check_mdmx (SD_, instruction_0); - if (SR & status_SBX) - { - check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); - MX_AbsDiffC(ValueFPR(VS,fmt_mdmx),VT,FMTSEL); - } - else - SignalException(ReservedInstruction, instruction_0); + check_sbx (SD_, instruction_0); + check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); + MX_AbsDiffC(ValueFPR(VS,fmt_mdmx),VT,FMTSEL); } @@ -182,11 +188,7 @@ *sb1: { check_mdmx (SD_, instruction_0); - if (SR & status_SBX) - { - check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); - StoreFPR(VD,fmt_mdmx,MX_Avg(ValueFPR(VS,fmt_mdmx),VT,FMTSEL)); - } - else - SignalException(ReservedInstruction, instruction_0); + check_sbx (SD_, instruction_0); + check_mdmx_fmtsel (SD_, instruction_0, FMTSEL); + StoreFPR(VD,fmt_mdmx,MX_Avg(ValueFPR(VS,fmt_mdmx),VT,FMTSEL)); } |