diff options
author | Chris Demetriou <cgd@google.com> | 2004-04-10 06:17:55 +0000 |
---|---|---|
committer | Chris Demetriou <cgd@google.com> | 2004-04-10 06:17:55 +0000 |
commit | c6f9085cab2e8b38e5319021a42f9c540e23d12f (patch) | |
tree | dcefee1a8d7e175addf6e6d3a6eb93b630cdbb0a /sim/mips/sb1.igen | |
parent | ccba17639bb5ce87551ac901354c19c7bdf31a3b (diff) | |
download | gdb-c6f9085cab2e8b38e5319021a42f9c540e23d12f.zip gdb-c6f9085cab2e8b38e5319021a42f9c540e23d12f.tar.gz gdb-c6f9085cab2e8b38e5319021a42f9c540e23d12f.tar.bz2 |
2004-04-09 Chris Demetriou <cgd@broadcom.com>
* sb1.igen (check_sbx): New function.
(PABSDIFF.fmt, PABSDIFC.fmt, PAVG.fmt): Use check_sbx.
Diffstat (limited to 'sim/mips/sb1.igen')
-rw-r--r-- | sim/mips/sb1.igen | 44 |
1 files changed, 23 insertions, 21 deletions
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)); } |