From c6f9085cab2e8b38e5319021a42f9c540e23d12f Mon Sep 17 00:00:00 2001 From: Chris Demetriou Date: Sat, 10 Apr 2004 06:17:55 +0000 Subject: 2004-04-09 Chris Demetriou * sb1.igen (check_sbx): New function. (PABSDIFF.fmt, PABSDIFC.fmt, PAVG.fmt): Use check_sbx. --- sim/mips/ChangeLog | 5 +++++ sim/mips/sb1.igen | 44 +++++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 21 deletions(-) (limited to 'sim/mips') 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 + + * sb1.igen (check_sbx): New function. + (PABSDIFF.fmt, PABSDIFC.fmt, PAVG.fmt): Use check_sbx. + 2004-03-29 Chris Demetriou Richard Sandiford 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)); } -- cgit v1.1