Commit 4b724efdde0287d7ba616bd2badc63fca414f978
1 parent
3fccc0150e
Exists in
master
and in
7 other branches
Get rid of SINGLE_ONLY_FPU. Linux does not support half FPU other than
by emulation of a full FPU. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Showing 1 changed file with 8 additions and 62 deletions Side-by-side Diff
arch/mips/math-emu/cp1emu.c
... | ... | @@ -256,7 +256,6 @@ |
256 | 256 | emul: |
257 | 257 | fpuemustats.emulated++; |
258 | 258 | switch (MIPSInst_OPCODE(ir)) { |
259 | -#ifndef SINGLE_ONLY_FPU | |
260 | 259 | case ldc1_op:{ |
261 | 260 | u64 __user *va = (u64 __user *) (xcp->regs[MIPSInst_RS(ir)] + |
262 | 261 | MIPSInst_SIMM(ir)); |
... | ... | @@ -284,7 +283,6 @@ |
284 | 283 | } |
285 | 284 | break; |
286 | 285 | } |
287 | -#endif | |
288 | 286 | |
289 | 287 | case lwc1_op:{ |
290 | 288 | u32 __user *va = (u32 __user *) (xcp->regs[MIPSInst_RS(ir)] + |
... | ... | @@ -296,12 +294,6 @@ |
296 | 294 | fpuemustats.errors++; |
297 | 295 | return SIGBUS; |
298 | 296 | } |
299 | -#ifdef SINGLE_ONLY_FPU | |
300 | - if (MIPSInst_RT(ir) & 1) { | |
301 | - /* illegal register in single-float mode */ | |
302 | - return SIGILL; | |
303 | - } | |
304 | -#endif | |
305 | 297 | SITOREG(val, MIPSInst_RT(ir)); |
306 | 298 | break; |
307 | 299 | } |
... | ... | @@ -312,12 +304,6 @@ |
312 | 304 | u32 val; |
313 | 305 | |
314 | 306 | fpuemustats.stores++; |
315 | -#ifdef SINGLE_ONLY_FPU | |
316 | - if (MIPSInst_RT(ir) & 1) { | |
317 | - /* illegal register in single-float mode */ | |
318 | - return SIGILL; | |
319 | - } | |
320 | -#endif | |
321 | 307 | SIFROMREG(val, MIPSInst_RT(ir)); |
322 | 308 | if (put_user(val, va)) { |
323 | 309 | fpuemustats.errors++; |
... | ... | @@ -329,7 +315,7 @@ |
329 | 315 | case cop1_op: |
330 | 316 | switch (MIPSInst_RS(ir)) { |
331 | 317 | |
332 | -#if defined(__mips64) && !defined(SINGLE_ONLY_FPU) | |
318 | +#if defined(__mips64) | |
333 | 319 | case dmfc_op: |
334 | 320 | /* copregister fs -> gpr[rt] */ |
335 | 321 | if (MIPSInst_RT(ir) != 0) { |
... | ... | @@ -346,12 +332,6 @@ |
346 | 332 | |
347 | 333 | case mfc_op: |
348 | 334 | /* copregister rd -> gpr[rt] */ |
349 | -#ifdef SINGLE_ONLY_FPU | |
350 | - if (MIPSInst_RD(ir) & 1) { | |
351 | - /* illegal register in single-float mode */ | |
352 | - return SIGILL; | |
353 | - } | |
354 | -#endif | |
355 | 335 | if (MIPSInst_RT(ir) != 0) { |
356 | 336 | SIFROMREG(xcp->regs[MIPSInst_RT(ir)], |
357 | 337 | MIPSInst_RD(ir)); |
... | ... | @@ -360,12 +340,6 @@ |
360 | 340 | |
361 | 341 | case mtc_op: |
362 | 342 | /* copregister rd <- rt */ |
363 | -#ifdef SINGLE_ONLY_FPU | |
364 | - if (MIPSInst_RD(ir) & 1) { | |
365 | - /* illegal register in single-float mode */ | |
366 | - return SIGILL; | |
367 | - } | |
368 | -#endif | |
369 | 343 | SITOREG(xcp->regs[MIPSInst_RT(ir)], MIPSInst_RD(ir)); |
370 | 344 | break; |
371 | 345 | |
... | ... | @@ -467,7 +441,7 @@ |
467 | 441 | switch (MIPSInst_OPCODE(ir)) { |
468 | 442 | case lwc1_op: |
469 | 443 | case swc1_op: |
470 | -#if (__mips >= 2 || defined(__mips64)) && !defined(SINGLE_ONLY_FPU) | |
444 | +#if (__mips >= 2 || defined(__mips64)) | |
471 | 445 | case ldc1_op: |
472 | 446 | case sdc1_op: |
473 | 447 | #endif |
... | ... | @@ -646,14 +620,6 @@ |
646 | 620 | fpuemustats.errors++; |
647 | 621 | return SIGBUS; |
648 | 622 | } |
649 | -#ifdef SINGLE_ONLY_FPU | |
650 | - if (MIPSInst_FD(ir) & 1) { | |
651 | - /* illegal register in single-float | |
652 | - * mode | |
653 | - */ | |
654 | - return SIGILL; | |
655 | - } | |
656 | -#endif | |
657 | 623 | SITOREG(val, MIPSInst_FD(ir)); |
658 | 624 | break; |
659 | 625 | |
... | ... | @@ -662,14 +628,6 @@ |
662 | 628 | xcp->regs[MIPSInst_FT(ir)]); |
663 | 629 | |
664 | 630 | fpuemustats.stores++; |
665 | -#ifdef SINGLE_ONLY_FPU | |
666 | - if (MIPSInst_FS(ir) & 1) { | |
667 | - /* illegal register in single-float | |
668 | - * mode | |
669 | - */ | |
670 | - return SIGILL; | |
671 | - } | |
672 | -#endif | |
673 | 631 | |
674 | 632 | SIFROMREG(val, MIPSInst_FS(ir)); |
675 | 633 | if (put_user(val, va)) { |
... | ... | @@ -723,7 +681,6 @@ |
723 | 681 | break; |
724 | 682 | } |
725 | 683 | |
726 | -#ifndef SINGLE_ONLY_FPU | |
727 | 684 | case d_fmt:{ /* 1 */ |
728 | 685 | ieee754dp(*handler) (ieee754dp, ieee754dp, ieee754dp); |
729 | 686 | ieee754dp fd, fr, fs, ft; |
... | ... | @@ -781,7 +738,6 @@ |
781 | 738 | } |
782 | 739 | break; |
783 | 740 | } |
784 | -#endif | |
785 | 741 | |
786 | 742 | case 0x7: /* 7 */ |
787 | 743 | if (MIPSInst_FUNC(ir) != pfetch_op) { |
... | ... | @@ -921,9 +877,6 @@ |
921 | 877 | case fcvts_op: |
922 | 878 | return SIGILL; /* not defined */ |
923 | 879 | case fcvtd_op:{ |
924 | -#ifdef SINGLE_ONLY_FPU | |
925 | - return SIGILL; /* not defined */ | |
926 | -#else | |
927 | 880 | ieee754sp fs; |
928 | 881 | |
929 | 882 | SPFROMREG(fs, MIPSInst_FS(ir)); |
... | ... | @@ -931,7 +884,6 @@ |
931 | 884 | rfmt = d_fmt; |
932 | 885 | goto copcsr; |
933 | 886 | } |
934 | -#endif | |
935 | 887 | case fcvtw_op:{ |
936 | 888 | ieee754sp fs; |
937 | 889 | |
... | ... | @@ -958,7 +910,7 @@ |
958 | 910 | } |
959 | 911 | #endif /* __mips >= 2 */ |
960 | 912 | |
961 | -#if defined(__mips64) && !defined(SINGLE_ONLY_FPU) | |
913 | +#if defined(__mips64) | |
962 | 914 | case fcvtl_op:{ |
963 | 915 | ieee754sp fs; |
964 | 916 | |
... | ... | @@ -982,7 +934,7 @@ |
982 | 934 | rfmt = l_fmt; |
983 | 935 | goto copcsr; |
984 | 936 | } |
985 | -#endif /* defined(__mips64) && !fpu(single) */ | |
937 | +#endif /* defined(__mips64) */ | |
986 | 938 | |
987 | 939 | default: |
988 | 940 | if (MIPSInst_FUNC(ir) >= fcmp_op) { |
... | ... | @@ -1009,7 +961,6 @@ |
1009 | 961 | break; |
1010 | 962 | } |
1011 | 963 | |
1012 | -#ifndef SINGLE_ONLY_FPU | |
1013 | 964 | case d_fmt:{ |
1014 | 965 | union { |
1015 | 966 | ieee754dp(*b) (ieee754dp, ieee754dp); |
... | ... | @@ -1133,7 +1084,7 @@ |
1133 | 1084 | } |
1134 | 1085 | #endif |
1135 | 1086 | |
1136 | -#if defined(__mips64) && !defined(SINGLE_ONLY_FPU) | |
1087 | +#if defined(__mips64) | |
1137 | 1088 | case fcvtl_op:{ |
1138 | 1089 | ieee754dp fs; |
1139 | 1090 | |
... | ... | @@ -1157,7 +1108,7 @@ |
1157 | 1108 | rfmt = l_fmt; |
1158 | 1109 | goto copcsr; |
1159 | 1110 | } |
1160 | -#endif /* __mips >= 3 && !fpu(single) */ | |
1111 | +#endif /* __mips >= 3 */ | |
1161 | 1112 | |
1162 | 1113 | default: |
1163 | 1114 | if (MIPSInst_FUNC(ir) >= fcmp_op) { |
... | ... | @@ -1185,7 +1136,6 @@ |
1185 | 1136 | } |
1186 | 1137 | break; |
1187 | 1138 | } |
1188 | -#endif /* ifndef SINGLE_ONLY_FPU */ | |
1189 | 1139 | |
1190 | 1140 | case w_fmt:{ |
1191 | 1141 | ieee754sp fs; |
1192 | 1142 | |
1193 | 1143 | |
... | ... | @@ -1197,21 +1147,19 @@ |
1197 | 1147 | rv.s = ieee754sp_fint(fs.bits); |
1198 | 1148 | rfmt = s_fmt; |
1199 | 1149 | goto copcsr; |
1200 | -#ifndef SINGLE_ONLY_FPU | |
1201 | 1150 | case fcvtd_op: |
1202 | 1151 | /* convert word to double precision real */ |
1203 | 1152 | SPFROMREG(fs, MIPSInst_FS(ir)); |
1204 | 1153 | rv.d = ieee754dp_fint(fs.bits); |
1205 | 1154 | rfmt = d_fmt; |
1206 | 1155 | goto copcsr; |
1207 | -#endif | |
1208 | 1156 | default: |
1209 | 1157 | return SIGILL; |
1210 | 1158 | } |
1211 | 1159 | break; |
1212 | 1160 | } |
1213 | 1161 | |
1214 | -#if defined(__mips64) && !defined(SINGLE_ONLY_FPU) | |
1162 | +#if defined(__mips64) | |
1215 | 1163 | case l_fmt:{ |
1216 | 1164 | switch (MIPSInst_FUNC(ir)) { |
1217 | 1165 | case fcvts_op: |
1218 | 1166 | |
1219 | 1167 | |
... | ... | @@ -1264,18 +1212,16 @@ |
1264 | 1212 | ctx->fcr31 &= ~cond; |
1265 | 1213 | break; |
1266 | 1214 | } |
1267 | -#ifndef SINGLE_ONLY_FPU | |
1268 | 1215 | case d_fmt: |
1269 | 1216 | DPTOREG(rv.d, MIPSInst_FD(ir)); |
1270 | 1217 | break; |
1271 | -#endif | |
1272 | 1218 | case s_fmt: |
1273 | 1219 | SPTOREG(rv.s, MIPSInst_FD(ir)); |
1274 | 1220 | break; |
1275 | 1221 | case w_fmt: |
1276 | 1222 | SITOREG(rv.w, MIPSInst_FD(ir)); |
1277 | 1223 | break; |
1278 | -#if defined(__mips64) && !defined(SINGLE_ONLY_FPU) | |
1224 | +#if defined(__mips64) | |
1279 | 1225 | case l_fmt: |
1280 | 1226 | DITOREG(rv.l, MIPSInst_FD(ir)); |
1281 | 1227 | break; |