Commit e67888a7da3d2fcea87dadf723ba18f8e577734a
1 parent
e3d8a985
Document FPSCR usage, by Magnus Damm.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3004 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
19 additions
and
19 deletions
target-sh4/translate.c
| ... | ... | @@ -647,7 +647,7 @@ void decode_opc(DisasContext * ctx) |
| 647 | 647 | gen_op_movl_rN_T0(REG(B7_4)); |
| 648 | 648 | gen_op_xor_T0_rN(REG(B11_8)); |
| 649 | 649 | return; |
| 650 | - case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn */ | |
| 650 | + case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */ | |
| 651 | 651 | if (ctx->fpscr & FPSCR_PR) { |
| 652 | 652 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| 653 | 653 | gen_op_fmov_DT0_drN(XREG(B11_8)); |
| ... | ... | @@ -661,7 +661,7 @@ void decode_opc(DisasContext * ctx) |
| 661 | 661 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 662 | 662 | } |
| 663 | 663 | return; |
| 664 | - case 0xf00a: /* fmov {F,D,X}Rm,@Rn */ | |
| 664 | + case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ | |
| 665 | 665 | if (ctx->fpscr & FPSCR_PR) { |
| 666 | 666 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| 667 | 667 | gen_op_movl_rN_T1(REG(B11_8)); |
| ... | ... | @@ -678,7 +678,7 @@ void decode_opc(DisasContext * ctx) |
| 678 | 678 | gen_op_stfl_FT0_T1(ctx); |
| 679 | 679 | } |
| 680 | 680 | return; |
| 681 | - case 0xf008: /* fmov @Rm,{F,D,X}Rn */ | |
| 681 | + case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ | |
| 682 | 682 | if (ctx->fpscr & FPSCR_PR) { |
| 683 | 683 | gen_op_movl_rN_T0(REG(B7_4)); |
| 684 | 684 | gen_op_ldfq_T0_DT0(ctx); |
| ... | ... | @@ -695,7 +695,7 @@ void decode_opc(DisasContext * ctx) |
| 695 | 695 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 696 | 696 | } |
| 697 | 697 | return; |
| 698 | - case 0xf009: /* fmov @Rm+,{F,D,X}Rn */ | |
| 698 | + case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ | |
| 699 | 699 | if (ctx->fpscr & FPSCR_PR) { |
| 700 | 700 | gen_op_movl_rN_T0(REG(B7_4)); |
| 701 | 701 | gen_op_ldfq_T0_DT0(ctx); |
| ... | ... | @@ -715,7 +715,7 @@ void decode_opc(DisasContext * ctx) |
| 715 | 715 | gen_op_inc4_rN(REG(B7_4)); |
| 716 | 716 | } |
| 717 | 717 | return; |
| 718 | - case 0xf00b: /* fmov {F,D,X}Rm,@-Rn */ | |
| 718 | + case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */ | |
| 719 | 719 | if (ctx->fpscr & FPSCR_PR) { |
| 720 | 720 | gen_op_dec8_rN(REG(B11_8)); |
| 721 | 721 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| ... | ... | @@ -735,7 +735,7 @@ void decode_opc(DisasContext * ctx) |
| 735 | 735 | gen_op_stfl_FT0_T1(ctx); |
| 736 | 736 | } |
| 737 | 737 | return; |
| 738 | - case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm */ | |
| 738 | + case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */ | |
| 739 | 739 | if (ctx->fpscr & FPSCR_PR) { |
| 740 | 740 | gen_op_movl_rN_T0(REG(B7_4)); |
| 741 | 741 | gen_op_add_rN_T0(REG(0)); |
| ... | ... | @@ -755,7 +755,7 @@ void decode_opc(DisasContext * ctx) |
| 755 | 755 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 756 | 756 | } |
| 757 | 757 | return; |
| 758 | - case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) */ | |
| 758 | + case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) - FPSCR: Nothing */ | |
| 759 | 759 | if (ctx->fpscr & FPSCR_PR) { |
| 760 | 760 | gen_op_fmov_drN_DT0(XREG(B7_4)); |
| 761 | 761 | gen_op_movl_rN_T1(REG(B11_8)); |
| ... | ... | @@ -775,12 +775,12 @@ void decode_opc(DisasContext * ctx) |
| 775 | 775 | gen_op_stfl_FT0_T1(ctx); |
| 776 | 776 | } |
| 777 | 777 | return; |
| 778 | - case 0xf000: /* fadd Rm,Rn */ | |
| 779 | - case 0xf001: /* fsub Rm,Rn */ | |
| 780 | - case 0xf002: /* fmul Rm,Rn */ | |
| 781 | - case 0xf003: /* fdiv Rm,Rn */ | |
| 782 | - case 0xf004: /* fcmp/eq Rm,Rn */ | |
| 783 | - case 0xf005: /* fcmp/gt Rm,Rn */ | |
| 778 | + case 0xf000: /* fadd Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ | |
| 779 | + case 0xf001: /* fsub Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ | |
| 780 | + case 0xf002: /* fmul Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ | |
| 781 | + case 0xf003: /* fdiv Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */ | |
| 782 | + case 0xf004: /* fcmp/eq Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ | |
| 783 | + case 0xf005: /* fcmp/gt Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ | |
| 784 | 784 | if (ctx->fpscr & FPSCR_PR) { |
| 785 | 785 | if (ctx->opcode & 0x0110) |
| 786 | 786 | break; /* illegal instruction */ |
| ... | ... | @@ -1121,15 +1121,15 @@ void decode_opc(DisasContext * ctx) |
| 1121 | 1121 | case 0x401b: /* tas.b @Rn */ |
| 1122 | 1122 | gen_op_tasb_rN(REG(B11_8)); |
| 1123 | 1123 | return; |
| 1124 | - case 0xf00d: /* fsts FPUL,FRn */ | |
| 1124 | + case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ | |
| 1125 | 1125 | gen_op_movl_fpul_FT0(); |
| 1126 | 1126 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 1127 | 1127 | return; |
| 1128 | - case 0xf01d: /* flds FRm.FPUL */ | |
| 1128 | + case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */ | |
| 1129 | 1129 | gen_op_fmov_frN_FT0(FREG(B11_8)); |
| 1130 | 1130 | gen_op_movl_FT0_fpul(); |
| 1131 | 1131 | return; |
| 1132 | - case 0xf02d: /* float FPUL,FRn/DRn */ | |
| 1132 | + case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Flag] */ | |
| 1133 | 1133 | if (ctx->fpscr & FPSCR_PR) { |
| 1134 | 1134 | if (ctx->opcode & 0x0100) |
| 1135 | 1135 | break; /* illegal instruction */ |
| ... | ... | @@ -1141,7 +1141,7 @@ void decode_opc(DisasContext * ctx) |
| 1141 | 1141 | gen_op_fmov_FT0_frN(FREG(B11_8)); |
| 1142 | 1142 | } |
| 1143 | 1143 | return; |
| 1144 | - case 0xf03d: /* ftrc FRm/DRm,FPUL */ | |
| 1144 | + case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ | |
| 1145 | 1145 | if (ctx->fpscr & FPSCR_PR) { |
| 1146 | 1146 | if (ctx->opcode & 0x0100) |
| 1147 | 1147 | break; /* illegal instruction */ |
| ... | ... | @@ -1153,14 +1153,14 @@ void decode_opc(DisasContext * ctx) |
| 1153 | 1153 | gen_op_ftrc_FT(); |
| 1154 | 1154 | } |
| 1155 | 1155 | return; |
| 1156 | - case 0xf08d: /* fldi0 FRn */ | |
| 1156 | + case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ | |
| 1157 | 1157 | if (!(ctx->fpscr & FPSCR_PR)) { |
| 1158 | 1158 | gen_op_movl_imm_T0(0); |
| 1159 | 1159 | gen_op_fmov_T0_frN(FREG(B11_8)); |
| 1160 | 1160 | return; |
| 1161 | 1161 | } |
| 1162 | 1162 | break; |
| 1163 | - case 0xf09d: /* fldi1 FRn */ | |
| 1163 | + case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */ | |
| 1164 | 1164 | if (!(ctx->fpscr & FPSCR_PR)) { |
| 1165 | 1165 | gen_op_movl_imm_T0(0x3f800000); |
| 1166 | 1166 | gen_op_fmov_T0_frN(FREG(B11_8)); | ... | ... |