From c3f8810dcc28bba4e949a8be4da6506d884d49d3 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 14 Jul 2010 09:10:00 +0000 Subject: [PATCH] implement some int to float conversions [r27738] --- ir/be/arm/arm_new_nodes.c | 3 ++- ir/be/arm/arm_spec.pl | 9 +++++++++ ir/be/arm/arm_transform.c | 8 ++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ir/be/arm/arm_new_nodes.c b/ir/be/arm/arm_new_nodes.c index bab6c9208..f4dc3048f 100644 --- a/ir/be/arm/arm_new_nodes.c +++ b/ir/be/arm/arm_new_nodes.c @@ -91,7 +91,8 @@ static bool has_cmp_attr(const ir_node *node) static bool has_farith_attr(const ir_node *node) { - return is_arm_Dvf(node) || is_arm_Adf(node); + return is_arm_Adf(node) || is_arm_Muf(node) || is_arm_Suf(node) + || is_arm_Dvf(node) || is_arm_Mvf(node) || is_arm_FltX(node); } /** diff --git a/ir/be/arm/arm_spec.pl b/ir/be/arm/arm_spec.pl index 42410f426..d65f3e1c2 100644 --- a/ir/be/arm/arm_spec.pl +++ b/ir/be/arm/arm_spec.pl @@ -515,6 +515,15 @@ Mvf => { mode => $mode_fp, }, +FltX => { + irn_flags => "R", + reg_req => { in => [ "gp" ], out => [ "fpa" ] }, + emit => '. flt%AM %D0, %S0', + attr_type => "arm_farith_attr_t", + attr => "ir_mode *op_mode", + mode => $mode_fp, +}, + Cmfe => { irn_flags => "R|F", mode => $mode_flags, diff --git a/ir/be/arm/arm_transform.c b/ir/be/arm/arm_transform.c index 4ded99b2c..59514e8dd 100644 --- a/ir/be/arm/arm_transform.c +++ b/ir/be/arm/arm_transform.c @@ -227,7 +227,11 @@ static ir_node *gen_Conv(ir_node *node) } } else { /* from int to float */ - panic("TODO"); + if (!mode_is_signed(src_mode)) { + panic("TODO"); + } else { + return new_bd_arm_FltX(dbg, block, new_op, dst_mode); + } } } else if (USE_VFP(env_cg->isa)) { panic("VFP not supported yet"); @@ -524,7 +528,7 @@ static ir_node *gen_Sub(ir_node *node) } } else { return gen_int_binop(node, MATCH_SIZE_NEUTRAL, - new_bd_arm_Sub_reg, new_bd_arm_Sub_imm); + new_bd_arm_Sub_reg, new_bd_arm_Sub_imm); } } -- 2.20.1