sh4: Document FPSCR usage This patch extends per opcode comments to include FPSCR usage. These comments are useful when implementing proper fpu exception handling in the future. This patch contains no logic changes. Signed-off-by: Magnus Damm --- 0003/target-sh4/translate.c +++ work/target-sh4/translate.c 2007-05-07 17:29:32.000000000 +0900 @@ -642,7 +642,7 @@ void decode_opc(DisasContext * ctx) gen_op_movl_rN_T0(REG(B7_4)); gen_op_xor_T0_rN(REG(B11_8)); return; - case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn */ + case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_fmov_drN_DT0(XREG(B7_4)); gen_op_fmov_DT0_drN(XREG(B11_8)); @@ -656,7 +656,7 @@ void decode_opc(DisasContext * ctx) gen_op_fmov_FT0_frN(FREG(B11_8)); } return; - case 0xf00a: /* fmov {F,D,X}Rm,@Rn */ + case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_fmov_drN_DT0(XREG(B7_4)); gen_op_movl_rN_T1(REG(B11_8)); @@ -673,7 +673,7 @@ void decode_opc(DisasContext * ctx) gen_op_stfl_FT0_T1(ctx); } return; - case 0xf008: /* fmov @Rm,{F,D,X}Rn */ + case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_movl_rN_T0(REG(B7_4)); gen_op_ldfq_T0_DT0(ctx); @@ -690,7 +690,7 @@ void decode_opc(DisasContext * ctx) gen_op_fmov_FT0_frN(FREG(B11_8)); } return; - case 0xf009: /* fmov @Rm+,{F,D,X}Rn */ + case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_movl_rN_T0(REG(B7_4)); gen_op_ldfq_T0_DT0(ctx); @@ -710,7 +710,7 @@ void decode_opc(DisasContext * ctx) gen_op_inc4_rN(REG(B7_4)); } return; - case 0xf00b: /* fmov {F,D,X}Rm,@-Rn */ + case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_dec8_rN(REG(B11_8)); gen_op_fmov_drN_DT0(XREG(B7_4)); @@ -730,7 +730,7 @@ void decode_opc(DisasContext * ctx) gen_op_stfl_FT0_T1(ctx); } return; - case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm */ + case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_movl_rN_T0(REG(B7_4)); gen_op_add_rN_T0(REG(0)); @@ -750,7 +750,7 @@ void decode_opc(DisasContext * ctx) gen_op_fmov_FT0_frN(FREG(B11_8)); } return; - case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) */ + case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) - FPSCR: Nothing */ if (ctx->fpscr & FPSCR_PR) { gen_op_fmov_drN_DT0(XREG(B7_4)); gen_op_movl_rN_T1(REG(B11_8)); @@ -770,12 +770,12 @@ void decode_opc(DisasContext * ctx) gen_op_stfl_FT0_T1(ctx); } return; - case 0xf000: /* fadd Rm,Rn */ - case 0xf001: /* fsub Rm,Rn */ - case 0xf002: /* fmul Rm,Rn */ - case 0xf003: /* fdiv Rm,Rn */ - case 0xf004: /* fcmp/eq Rm,Rn */ - case 0xf005: /* fcmp/gt Rm,Rn */ + case 0xf000: /* fadd Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ + case 0xf001: /* fsub Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ + case 0xf002: /* fmul Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ + case 0xf003: /* fdiv Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ + case 0xf004: /* fcmp/eq Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ + case 0xf005: /* fcmp/gt Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ if (ctx->fpscr & FPSCR_PR) { if (ctx->opcode & 0x0110) break; /* illegal instruction */ @@ -1116,15 +1116,15 @@ void decode_opc(DisasContext * ctx) case 0x401b: /* tas.b @Rn */ gen_op_tasb_rN(REG(B11_8)); return; - case 0xf00d: /* fsts FPUL,FRn */ + case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ gen_op_movl_fpul_FT0(); gen_op_fmov_FT0_frN(FREG(B11_8)); return; - case 0xf01d: /* flds FRm.FPUL */ + case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */ gen_op_fmov_frN_FT0(FREG(B11_8)); gen_op_movl_FT0_fpul(); return; - case 0xf02d: /* float FPUL,FRn/DRn */ + case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Flag] */ if (ctx->fpscr & FPSCR_PR) { if (ctx->opcode & 0x0100) break; /* illegal instruction */ @@ -1136,7 +1136,7 @@ void decode_opc(DisasContext * ctx) gen_op_fmov_FT0_frN(FREG(B11_8)); } return; - case 0xf03d: /* ftrc FRm/DRm,FPUL */ + case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ if (ctx->fpscr & FPSCR_PR) { if (ctx->opcode & 0x0100) break; /* illegal instruction */ @@ -1148,7 +1148,7 @@ void decode_opc(DisasContext * ctx) gen_op_ftrc_FT(); } return; - case 0xf08d: /* fldi0 FRn */ + case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ if (!(ctx->fpscr & FPSCR_PR)) { gen_op_movl_imm_T0(0); gen_op_movl_T0_FT0(); @@ -1156,7 +1156,7 @@ void decode_opc(DisasContext * ctx) return; } break; - case 0xf09d: /* fldi1 FRn */ + case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */ if (!(ctx->fpscr & FPSCR_PR)) { gen_op_movl_imm_T0(0x3f800000); gen_op_movl_T0_FT0();