Commit e67888a7da3d2fcea87dadf723ba18f8e577734a

Authored by ths
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,7 +647,7 @@ void decode_opc(DisasContext * ctx)
647 gen_op_movl_rN_T0(REG(B7_4)); 647 gen_op_movl_rN_T0(REG(B7_4));
648 gen_op_xor_T0_rN(REG(B11_8)); 648 gen_op_xor_T0_rN(REG(B11_8));
649 return; 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 if (ctx->fpscr & FPSCR_PR) { 651 if (ctx->fpscr & FPSCR_PR) {
652 gen_op_fmov_drN_DT0(XREG(B7_4)); 652 gen_op_fmov_drN_DT0(XREG(B7_4));
653 gen_op_fmov_DT0_drN(XREG(B11_8)); 653 gen_op_fmov_DT0_drN(XREG(B11_8));
@@ -661,7 +661,7 @@ void decode_opc(DisasContext * ctx) @@ -661,7 +661,7 @@ void decode_opc(DisasContext * ctx)
661 gen_op_fmov_FT0_frN(FREG(B11_8)); 661 gen_op_fmov_FT0_frN(FREG(B11_8));
662 } 662 }
663 return; 663 return;
664 - case 0xf00a: /* fmov {F,D,X}Rm,@Rn */ 664 + case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */
665 if (ctx->fpscr & FPSCR_PR) { 665 if (ctx->fpscr & FPSCR_PR) {
666 gen_op_fmov_drN_DT0(XREG(B7_4)); 666 gen_op_fmov_drN_DT0(XREG(B7_4));
667 gen_op_movl_rN_T1(REG(B11_8)); 667 gen_op_movl_rN_T1(REG(B11_8));
@@ -678,7 +678,7 @@ void decode_opc(DisasContext * ctx) @@ -678,7 +678,7 @@ void decode_opc(DisasContext * ctx)
678 gen_op_stfl_FT0_T1(ctx); 678 gen_op_stfl_FT0_T1(ctx);
679 } 679 }
680 return; 680 return;
681 - case 0xf008: /* fmov @Rm,{F,D,X}Rn */ 681 + case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */
682 if (ctx->fpscr & FPSCR_PR) { 682 if (ctx->fpscr & FPSCR_PR) {
683 gen_op_movl_rN_T0(REG(B7_4)); 683 gen_op_movl_rN_T0(REG(B7_4));
684 gen_op_ldfq_T0_DT0(ctx); 684 gen_op_ldfq_T0_DT0(ctx);
@@ -695,7 +695,7 @@ void decode_opc(DisasContext * ctx) @@ -695,7 +695,7 @@ void decode_opc(DisasContext * ctx)
695 gen_op_fmov_FT0_frN(FREG(B11_8)); 695 gen_op_fmov_FT0_frN(FREG(B11_8));
696 } 696 }
697 return; 697 return;
698 - case 0xf009: /* fmov @Rm+,{F,D,X}Rn */ 698 + case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */
699 if (ctx->fpscr & FPSCR_PR) { 699 if (ctx->fpscr & FPSCR_PR) {
700 gen_op_movl_rN_T0(REG(B7_4)); 700 gen_op_movl_rN_T0(REG(B7_4));
701 gen_op_ldfq_T0_DT0(ctx); 701 gen_op_ldfq_T0_DT0(ctx);
@@ -715,7 +715,7 @@ void decode_opc(DisasContext * ctx) @@ -715,7 +715,7 @@ void decode_opc(DisasContext * ctx)
715 gen_op_inc4_rN(REG(B7_4)); 715 gen_op_inc4_rN(REG(B7_4));
716 } 716 }
717 return; 717 return;
718 - case 0xf00b: /* fmov {F,D,X}Rm,@-Rn */ 718 + case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */
719 if (ctx->fpscr & FPSCR_PR) { 719 if (ctx->fpscr & FPSCR_PR) {
720 gen_op_dec8_rN(REG(B11_8)); 720 gen_op_dec8_rN(REG(B11_8));
721 gen_op_fmov_drN_DT0(XREG(B7_4)); 721 gen_op_fmov_drN_DT0(XREG(B7_4));
@@ -735,7 +735,7 @@ void decode_opc(DisasContext * ctx) @@ -735,7 +735,7 @@ void decode_opc(DisasContext * ctx)
735 gen_op_stfl_FT0_T1(ctx); 735 gen_op_stfl_FT0_T1(ctx);
736 } 736 }
737 return; 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 if (ctx->fpscr & FPSCR_PR) { 739 if (ctx->fpscr & FPSCR_PR) {
740 gen_op_movl_rN_T0(REG(B7_4)); 740 gen_op_movl_rN_T0(REG(B7_4));
741 gen_op_add_rN_T0(REG(0)); 741 gen_op_add_rN_T0(REG(0));
@@ -755,7 +755,7 @@ void decode_opc(DisasContext * ctx) @@ -755,7 +755,7 @@ void decode_opc(DisasContext * ctx)
755 gen_op_fmov_FT0_frN(FREG(B11_8)); 755 gen_op_fmov_FT0_frN(FREG(B11_8));
756 } 756 }
757 return; 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 if (ctx->fpscr & FPSCR_PR) { 759 if (ctx->fpscr & FPSCR_PR) {
760 gen_op_fmov_drN_DT0(XREG(B7_4)); 760 gen_op_fmov_drN_DT0(XREG(B7_4));
761 gen_op_movl_rN_T1(REG(B11_8)); 761 gen_op_movl_rN_T1(REG(B11_8));
@@ -775,12 +775,12 @@ void decode_opc(DisasContext * ctx) @@ -775,12 +775,12 @@ void decode_opc(DisasContext * ctx)
775 gen_op_stfl_FT0_T1(ctx); 775 gen_op_stfl_FT0_T1(ctx);
776 } 776 }
777 return; 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 if (ctx->fpscr & FPSCR_PR) { 784 if (ctx->fpscr & FPSCR_PR) {
785 if (ctx->opcode & 0x0110) 785 if (ctx->opcode & 0x0110)
786 break; /* illegal instruction */ 786 break; /* illegal instruction */
@@ -1121,15 +1121,15 @@ void decode_opc(DisasContext * ctx) @@ -1121,15 +1121,15 @@ void decode_opc(DisasContext * ctx)
1121 case 0x401b: /* tas.b @Rn */ 1121 case 0x401b: /* tas.b @Rn */
1122 gen_op_tasb_rN(REG(B11_8)); 1122 gen_op_tasb_rN(REG(B11_8));
1123 return; 1123 return;
1124 - case 0xf00d: /* fsts FPUL,FRn */ 1124 + case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
1125 gen_op_movl_fpul_FT0(); 1125 gen_op_movl_fpul_FT0();
1126 gen_op_fmov_FT0_frN(FREG(B11_8)); 1126 gen_op_fmov_FT0_frN(FREG(B11_8));
1127 return; 1127 return;
1128 - case 0xf01d: /* flds FRm.FPUL */ 1128 + case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */
1129 gen_op_fmov_frN_FT0(FREG(B11_8)); 1129 gen_op_fmov_frN_FT0(FREG(B11_8));
1130 gen_op_movl_FT0_fpul(); 1130 gen_op_movl_FT0_fpul();
1131 return; 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 if (ctx->fpscr & FPSCR_PR) { 1133 if (ctx->fpscr & FPSCR_PR) {
1134 if (ctx->opcode & 0x0100) 1134 if (ctx->opcode & 0x0100)
1135 break; /* illegal instruction */ 1135 break; /* illegal instruction */
@@ -1141,7 +1141,7 @@ void decode_opc(DisasContext * ctx) @@ -1141,7 +1141,7 @@ void decode_opc(DisasContext * ctx)
1141 gen_op_fmov_FT0_frN(FREG(B11_8)); 1141 gen_op_fmov_FT0_frN(FREG(B11_8));
1142 } 1142 }
1143 return; 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 if (ctx->fpscr & FPSCR_PR) { 1145 if (ctx->fpscr & FPSCR_PR) {
1146 if (ctx->opcode & 0x0100) 1146 if (ctx->opcode & 0x0100)
1147 break; /* illegal instruction */ 1147 break; /* illegal instruction */
@@ -1153,14 +1153,14 @@ void decode_opc(DisasContext * ctx) @@ -1153,14 +1153,14 @@ void decode_opc(DisasContext * ctx)
1153 gen_op_ftrc_FT(); 1153 gen_op_ftrc_FT();
1154 } 1154 }
1155 return; 1155 return;
1156 - case 0xf08d: /* fldi0 FRn */ 1156 + case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */
1157 if (!(ctx->fpscr & FPSCR_PR)) { 1157 if (!(ctx->fpscr & FPSCR_PR)) {
1158 gen_op_movl_imm_T0(0); 1158 gen_op_movl_imm_T0(0);
1159 gen_op_fmov_T0_frN(FREG(B11_8)); 1159 gen_op_fmov_T0_frN(FREG(B11_8));
1160 return; 1160 return;
1161 } 1161 }
1162 break; 1162 break;
1163 - case 0xf09d: /* fldi1 FRn */ 1163 + case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */
1164 if (!(ctx->fpscr & FPSCR_PR)) { 1164 if (!(ctx->fpscr & FPSCR_PR)) {
1165 gen_op_movl_imm_T0(0x3f800000); 1165 gen_op_movl_imm_T0(0x3f800000);
1166 gen_op_fmov_T0_frN(FREG(B11_8)); 1166 gen_op_fmov_T0_frN(FREG(B11_8));