aboutsummaryrefslogtreecommitdiff
path: root/target/microblaze
diff options
context:
space:
mode:
authorEdgar E. Iglesias <edgar.iglesias@xilinx.com>2018-05-08 17:31:50 +0200
committerEdgar E. Iglesias <edgar.iglesias@xilinx.com>2018-05-29 09:35:14 +0200
commitd89b86e9129a7c21a453fc495fc52b062708e8dc (patch)
treef76814dd7d0a38d6a2a7259a0a0c094ea9438e9b /target/microblaze
parent75c9ddce5d069c27b91e75127f969f32842cb664 (diff)
target-microblaze: Use table based condition-codes conversion
Use a table based conversion to map condition-codes between MicroBlaze ISA encoding and TCG. No functional change. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Diffstat (limited to 'target/microblaze')
-rw-r--r--target/microblaze/translate.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
index 0d8ef77513..092e182c2f 100644
--- a/target/microblaze/translate.c
+++ b/target/microblaze/translate.c
@@ -1145,28 +1145,27 @@ static void dec_store(DisasContext *dc)
static inline void eval_cc(DisasContext *dc, unsigned int cc,
TCGv_i32 d, TCGv_i32 a, TCGv_i32 b)
{
+ static const int mb_to_tcg_cc[] = {
+ [CC_EQ] = TCG_COND_EQ,
+ [CC_NE] = TCG_COND_NE,
+ [CC_LT] = TCG_COND_LT,
+ [CC_LE] = TCG_COND_LE,
+ [CC_GE] = TCG_COND_GE,
+ [CC_GT] = TCG_COND_GT,
+ };
+
switch (cc) {
- case CC_EQ:
- tcg_gen_setcond_i32(TCG_COND_EQ, d, a, b);
- break;
- case CC_NE:
- tcg_gen_setcond_i32(TCG_COND_NE, d, a, b);
- break;
- case CC_LT:
- tcg_gen_setcond_i32(TCG_COND_LT, d, a, b);
- break;
- case CC_LE:
- tcg_gen_setcond_i32(TCG_COND_LE, d, a, b);
- break;
- case CC_GE:
- tcg_gen_setcond_i32(TCG_COND_GE, d, a, b);
- break;
- case CC_GT:
- tcg_gen_setcond_i32(TCG_COND_GT, d, a, b);
- break;
- default:
- cpu_abort(CPU(dc->cpu), "Unknown condition code %x.\n", cc);
- break;
+ case CC_EQ:
+ case CC_NE:
+ case CC_LT:
+ case CC_LE:
+ case CC_GE:
+ case CC_GT:
+ tcg_gen_setcond_i32(mb_to_tcg_cc[cc], d, a, b);
+ break;
+ default:
+ cpu_abort(CPU(dc->cpu), "Unknown condition code %x.\n", cc);
+ break;
}
}