summaryrefslogtreecommitdiff
path: root/target-mips/op.c
diff options
context:
space:
mode:
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2008-06-19 18:35:02 +0000
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2008-06-19 18:35:02 +0000
commita16336e4792c4f092bd2fdcd20c9d70c979b2b22 (patch)
treee68efa6208ef973029514d7e513f7ab6e2c03319 /target-mips/op.c
parent8f2ad0a3fc5e3569183d44bf1c7fcb95294be4c0 (diff)
downloadqemu-a16336e4792c4f092bd2fdcd20c9d70c979b2b22.tar.gz
Convert remaining MIPS FP instructions to TCG.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4753 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-mips/op.c')
-rw-r--r--target-mips/op.c292
1 files changed, 0 insertions, 292 deletions
diff --git a/target-mips/op.c b/target-mips/op.c
index 2c99ad754d..5e778f2b37 100644
--- a/target-mips/op.c
+++ b/target-mips/op.c
@@ -295,295 +295,3 @@ void op_mulshiu (void)
#else
# define DEBUG_FPU_STATE() do { } while(0)
#endif
-
-/* Float support.
- Single precition routines have a "s" suffix, double precision a
- "d" suffix, 32bit integer "w", 64bit integer "l", paired singe "ps",
- paired single lowwer "pl", paired single upper "pu". */
-
-#define FLOAT_OP(name, p) void OPPROTO op_float_##name##_##p(void)
-
-FLOAT_OP(pll, ps)
-{
- DT2 = ((uint64_t)WT0 << 32) | WT1;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(plu, ps)
-{
- DT2 = ((uint64_t)WT0 << 32) | WTH1;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(pul, ps)
-{
- DT2 = ((uint64_t)WTH0 << 32) | WT1;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(puu, ps)
-{
- DT2 = ((uint64_t)WTH0 << 32) | WTH1;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-
-FLOAT_OP(movf, d)
-{
- if (!(env->fpu->fcr31 & PARAM1))
- DT2 = DT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movf, s)
-{
- if (!(env->fpu->fcr31 & PARAM1))
- WT2 = WT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movf, ps)
-{
- unsigned int mask = GET_FP_COND (env->fpu) >> PARAM1;
- if (!(mask & 1))
- WT2 = WT0;
- if (!(mask & 2))
- WTH2 = WTH0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movt, d)
-{
- if (env->fpu->fcr31 & PARAM1)
- DT2 = DT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movt, s)
-{
- if (env->fpu->fcr31 & PARAM1)
- WT2 = WT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movt, ps)
-{
- unsigned int mask = GET_FP_COND (env->fpu) >> PARAM1;
- if (mask & 1)
- WT2 = WT0;
- if (mask & 2)
- WTH2 = WTH0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movz, d)
-{
- if (!T0)
- DT2 = DT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movz, s)
-{
- if (!T0)
- WT2 = WT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movz, ps)
-{
- if (!T0) {
- WT2 = WT0;
- WTH2 = WTH0;
- }
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movn, d)
-{
- if (T0)
- DT2 = DT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movn, s)
-{
- if (T0)
- WT2 = WT0;
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-FLOAT_OP(movn, ps)
-{
- if (T0) {
- WT2 = WT0;
- WTH2 = WTH0;
- }
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-
-/* ternary operations */
-#define FLOAT_TERNOP(name1, name2) \
-FLOAT_OP(name1 ## name2, d) \
-{ \
- FDT0 = float64_ ## name1 (FDT0, FDT1, &env->fpu->fp_status); \
- FDT2 = float64_ ## name2 (FDT0, FDT2, &env->fpu->fp_status); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(name1 ## name2, s) \
-{ \
- FST0 = float32_ ## name1 (FST0, FST1, &env->fpu->fp_status); \
- FST2 = float32_ ## name2 (FST0, FST2, &env->fpu->fp_status); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(name1 ## name2, ps) \
-{ \
- FST0 = float32_ ## name1 (FST0, FST1, &env->fpu->fp_status); \
- FSTH0 = float32_ ## name1 (FSTH0, FSTH1, &env->fpu->fp_status); \
- FST2 = float32_ ## name2 (FST0, FST2, &env->fpu->fp_status); \
- FSTH2 = float32_ ## name2 (FSTH0, FSTH2, &env->fpu->fp_status); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-}
-FLOAT_TERNOP(mul, add)
-FLOAT_TERNOP(mul, sub)
-#undef FLOAT_TERNOP
-
-/* negated ternary operations */
-#define FLOAT_NTERNOP(name1, name2) \
-FLOAT_OP(n ## name1 ## name2, d) \
-{ \
- FDT0 = float64_ ## name1 (FDT0, FDT1, &env->fpu->fp_status); \
- FDT2 = float64_ ## name2 (FDT0, FDT2, &env->fpu->fp_status); \
- FDT2 = float64_chs(FDT2); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(n ## name1 ## name2, s) \
-{ \
- FST0 = float32_ ## name1 (FST0, FST1, &env->fpu->fp_status); \
- FST2 = float32_ ## name2 (FST0, FST2, &env->fpu->fp_status); \
- FST2 = float32_chs(FST2); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(n ## name1 ## name2, ps) \
-{ \
- FST0 = float32_ ## name1 (FST0, FST1, &env->fpu->fp_status); \
- FSTH0 = float32_ ## name1 (FSTH0, FSTH1, &env->fpu->fp_status); \
- FST2 = float32_ ## name2 (FST0, FST2, &env->fpu->fp_status); \
- FSTH2 = float32_ ## name2 (FSTH0, FSTH2, &env->fpu->fp_status); \
- FST2 = float32_chs(FST2); \
- FSTH2 = float32_chs(FSTH2); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-}
-FLOAT_NTERNOP(mul, add)
-FLOAT_NTERNOP(mul, sub)
-#undef FLOAT_NTERNOP
-
-/* unary operations, modifying fp status */
-#define FLOAT_UNOP(name) \
-FLOAT_OP(name, d) \
-{ \
- FDT2 = float64_ ## name(FDT0, &env->fpu->fp_status); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(name, s) \
-{ \
- FST2 = float32_ ## name(FST0, &env->fpu->fp_status); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-}
-FLOAT_UNOP(sqrt)
-#undef FLOAT_UNOP
-
-/* unary operations, not modifying fp status */
-#define FLOAT_UNOP(name) \
-FLOAT_OP(name, d) \
-{ \
- FDT2 = float64_ ## name(FDT0); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(name, s) \
-{ \
- FST2 = float32_ ## name(FST0); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-} \
-FLOAT_OP(name, ps) \
-{ \
- FST2 = float32_ ## name(FST0); \
- FSTH2 = float32_ ## name(FSTH0); \
- DEBUG_FPU_STATE(); \
- FORCE_RET(); \
-}
-FLOAT_UNOP(abs)
-FLOAT_UNOP(chs)
-#undef FLOAT_UNOP
-
-FLOAT_OP(alnv, ps)
-{
- switch (T0 & 0x7) {
- case 0:
- FST2 = FST0;
- FSTH2 = FSTH0;
- break;
- case 4:
-#ifdef TARGET_WORDS_BIGENDIAN
- FSTH2 = FST0;
- FST2 = FSTH1;
-#else
- FSTH2 = FST1;
- FST2 = FSTH0;
-#endif
- break;
- default: /* unpredictable */
- break;
- }
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-
-void op_bc1f (void)
-{
- T0 = !!(~GET_FP_COND(env->fpu) & (0x1 << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-void op_bc1any2f (void)
-{
- T0 = !!(~GET_FP_COND(env->fpu) & (0x3 << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-void op_bc1any4f (void)
-{
- T0 = !!(~GET_FP_COND(env->fpu) & (0xf << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-
-void op_bc1t (void)
-{
- T0 = !!(GET_FP_COND(env->fpu) & (0x1 << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-void op_bc1any2t (void)
-{
- T0 = !!(GET_FP_COND(env->fpu) & (0x3 << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}
-void op_bc1any4t (void)
-{
- T0 = !!(GET_FP_COND(env->fpu) & (0xf << PARAM1));
- DEBUG_FPU_STATE();
- FORCE_RET();
-}