[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v5 9/9] target-mips: Clean up position of abs2008/nan2
From: |
Aleksandar Markovic |
Subject: |
[Qemu-arm] [PATCH v5 9/9] target-mips: Clean up position of abs2008/nan2008 cases in genfarith() |
Date: |
Mon, 18 Apr 2016 18:03:42 +0200 |
From: Aleksandar Markovic <address@hidden>
This patch slightly reorders cases in genfarith() so that abs2008/nan2008-
dependant cases are grouped together, for easier maintenantce (code becomes
less prone to errors).
Signed-off-by: Aleksandar Markovic <address@hidden>
---
target-mips/translate.c | 152 ++++++++++++++++++++++++------------------------
1 file changed, 76 insertions(+), 76 deletions(-)
diff --git a/target-mips/translate.c b/target-mips/translate.c
index b7ab98a..76df972 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -8876,25 +8876,25 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i32(fp0);
}
break;
- case OPC_ABS_S:
+ case OPC_MOV_S:
{
TCGv_i32 fp0 = tcg_temp_new_i32();
gen_load_fpr32(ctx, fp0, fs);
- if (ctx->abs2008) {
- tcg_gen_andi_i32(fp0, fp0, 0x7fffffffUL);
- } else {
- gen_helper_float_abs_s(fp0, fp0);
- }
gen_store_fpr32(ctx, fp0, fd);
tcg_temp_free_i32(fp0);
}
break;
- case OPC_MOV_S:
+ case OPC_ABS_S:
{
TCGv_i32 fp0 = tcg_temp_new_i32();
gen_load_fpr32(ctx, fp0, fs);
+ if (ctx->abs2008) {
+ tcg_gen_andi_i32(fp0, fp0, 0x7fffffffUL);
+ } else {
+ gen_helper_float_abs_s(fp0, fp0);
+ }
gen_store_fpr32(ctx, fp0, fd);
tcg_temp_free_i32(fp0);
}
@@ -8913,6 +8913,23 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i32(fp0);
}
break;
+ case OPC_CVT_L_S:
+ check_cp1_64bitmode(ctx);
+ {
+ TCGv_i32 fp32 = tcg_temp_new_i32();
+ TCGv_i64 fp64 = tcg_temp_new_i64();
+
+ gen_load_fpr32(ctx, fp32, fs);
+ if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
+ gen_helper_float_cvt_2008_l_s(fp64, cpu_env, fp32);
+ } else {
+ gen_helper_float_cvt_l_s(fp64, cpu_env, fp32);
+ }
+ tcg_temp_free_i32(fp32);
+ gen_store_fpr64(ctx, fp64, fd);
+ tcg_temp_free_i64(fp64);
+ }
+ break;
case OPC_ROUND_L_S:
check_cp1_64bitmode(ctx);
{
@@ -8981,6 +8998,20 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i64(fp64);
}
break;
+ case OPC_CVT_W_S:
+ {
+ TCGv_i32 fp0 = tcg_temp_new_i32();
+
+ gen_load_fpr32(ctx, fp0, fs);
+ if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
+ gen_helper_float_cvt_2008_w_s(fp0, cpu_env, fp0);
+ } else {
+ gen_helper_float_cvt_w_s(fp0, cpu_env, fp0);
+ }
+ gen_store_fpr32(ctx, fp0, fd);
+ tcg_temp_free_i32(fp0);
+ }
+ break;
case OPC_ROUND_W_S:
{
TCGv_i32 fp0 = tcg_temp_new_i32();
@@ -9276,37 +9307,6 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i64(fp64);
}
break;
- case OPC_CVT_W_S:
- {
- TCGv_i32 fp0 = tcg_temp_new_i32();
-
- gen_load_fpr32(ctx, fp0, fs);
- if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
- gen_helper_float_cvt_2008_w_s(fp0, cpu_env, fp0);
- } else {
- gen_helper_float_cvt_w_s(fp0, cpu_env, fp0);
- }
- gen_store_fpr32(ctx, fp0, fd);
- tcg_temp_free_i32(fp0);
- }
- break;
- case OPC_CVT_L_S:
- check_cp1_64bitmode(ctx);
- {
- TCGv_i32 fp32 = tcg_temp_new_i32();
- TCGv_i64 fp64 = tcg_temp_new_i64();
-
- gen_load_fpr32(ctx, fp32, fs);
- if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
- gen_helper_float_cvt_2008_l_s(fp64, cpu_env, fp32);
- } else {
- gen_helper_float_cvt_l_s(fp64, cpu_env, fp32);
- }
- tcg_temp_free_i32(fp32);
- gen_store_fpr64(ctx, fp64, fd);
- tcg_temp_free_i64(fp64);
- }
- break;
case OPC_CVT_PS_S:
check_ps(ctx);
{
@@ -9413,6 +9413,16 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i64(fp0);
}
break;
+ case OPC_MOV_D:
+ check_cp1_registers(ctx, fs | fd);
+ {
+ TCGv_i64 fp0 = tcg_temp_new_i64();
+
+ gen_load_fpr64(ctx, fp0, fs);
+ gen_store_fpr64(ctx, fp0, fd);
+ tcg_temp_free_i64(fp0);
+ }
+ break;
case OPC_ABS_D:
check_cp1_registers(ctx, fs | fd);
{
@@ -9428,26 +9438,31 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i64(fp0);
}
break;
- case OPC_MOV_D:
+ case OPC_NEG_D:
check_cp1_registers(ctx, fs | fd);
{
TCGv_i64 fp0 = tcg_temp_new_i64();
gen_load_fpr64(ctx, fp0, fs);
+ if (ctx->abs2008) {
+ tcg_gen_xori_i64(fp0, fp0, 1ULL << 63);
+ } else {
+ gen_helper_float_chs_d(fp0, fp0);
+ }
gen_store_fpr64(ctx, fp0, fd);
tcg_temp_free_i64(fp0);
}
break;
- case OPC_NEG_D:
- check_cp1_registers(ctx, fs | fd);
+ case OPC_CVT_L_D:
+ check_cp1_64bitmode(ctx);
{
TCGv_i64 fp0 = tcg_temp_new_i64();
gen_load_fpr64(ctx, fp0, fs);
- if (ctx->abs2008) {
- tcg_gen_xori_i64(fp0, fp0, 1ULL << 63);
+ if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
+ gen_helper_float_cvt_2008_l_d(fp0, cpu_env, fp0);
} else {
- gen_helper_float_chs_d(fp0, fp0);
+ gen_helper_float_cvt_l_d(fp0, cpu_env, fp0);
}
gen_store_fpr64(ctx, fp0, fd);
tcg_temp_free_i64(fp0);
@@ -9513,6 +9528,23 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i64(fp0);
}
break;
+ case OPC_CVT_W_D:
+ check_cp1_registers(ctx, fs);
+ {
+ TCGv_i32 fp32 = tcg_temp_new_i32();
+ TCGv_i64 fp64 = tcg_temp_new_i64();
+
+ gen_load_fpr64(ctx, fp64, fs);
+ if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
+ gen_helper_float_cvt_2008_w_d(fp32, cpu_env, fp64);
+ } else {
+ gen_helper_float_cvt_w_d(fp32, cpu_env, fp64);
+ }
+ tcg_temp_free_i64(fp64);
+ gen_store_fpr32(ctx, fp32, fd);
+ tcg_temp_free_i32(fp32);
+ }
+ break;
case OPC_ROUND_W_D:
check_cp1_registers(ctx, fs);
{
@@ -9841,38 +9873,6 @@ static void gen_farith (DisasContext *ctx, enum fopcode
op1,
tcg_temp_free_i32(fp32);
}
break;
- case OPC_CVT_W_D:
- check_cp1_registers(ctx, fs);
- {
- TCGv_i32 fp32 = tcg_temp_new_i32();
- TCGv_i64 fp64 = tcg_temp_new_i64();
-
- gen_load_fpr64(ctx, fp64, fs);
- if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
- gen_helper_float_cvt_2008_w_d(fp32, cpu_env, fp64);
- } else {
- gen_helper_float_cvt_w_d(fp32, cpu_env, fp64);
- }
- tcg_temp_free_i64(fp64);
- gen_store_fpr32(ctx, fp32, fd);
- tcg_temp_free_i32(fp32);
- }
- break;
- case OPC_CVT_L_D:
- check_cp1_64bitmode(ctx);
- {
- TCGv_i64 fp0 = tcg_temp_new_i64();
-
- gen_load_fpr64(ctx, fp0, fs);
- if ((ctx->insn_flags & ISA_MIPS32R6) && (ctx->nan2008)) {
- gen_helper_float_cvt_2008_l_d(fp0, cpu_env, fp0);
- } else {
- gen_helper_float_cvt_l_d(fp0, cpu_env, fp0);
- }
- gen_store_fpr64(ctx, fp0, fd);
- tcg_temp_free_i64(fp0);
- }
- break;
case OPC_CVT_S_W:
{
TCGv_i32 fp0 = tcg_temp_new_i32();
--
1.9.1
- [Qemu-arm] [PATCH v5 5/9] target-mips: Activate IEEE 274-2008 signaling NaN bit meaning, (continued)
- [Qemu-arm] [PATCH v5 5/9] target-mips: Activate IEEE 274-2008 signaling NaN bit meaning, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 8/9] target-mips: Clean up position and order of helpers for CVT.<L|W>.<S|D>, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 6/9] target-mips: Add abs2008 flavor of <ABS|NEG>.<S|D>, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 4/9] target-mips: Amend processor definitions in relation to FCR31, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 2/9] softfloat: For Mips only, correct default NaN values, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 7/9] target-mips: Add nan2008 flavor of <CEIL|CVT|FLOOR|ROUND|TRUNC>.<L|W>.<S|D>, Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 3/9] softfloat: For Mips only, correct order in pickNaNMulAdd(), Aleksandar Markovic, 2016/04/18
- [Qemu-arm] [PATCH v5 9/9] target-mips: Clean up position of abs2008/nan2008 cases in genfarith(),
Aleksandar Markovic <=
- [Qemu-arm] [PATCH v5 1/9] softfloat: Implement run-time-configurable meaning of signaling NaN bit, Aleksandar Markovic, 2016/04/18