From: Christoph Mallon Date: Fri, 6 Aug 2010 17:14:52 +0000 (+0000) Subject: Correct and clean up gen_Abs() for SPARC: The Sub was the wrong way round. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=586fe6fefc35c2d670f3a37b279d2384c455d360;p=libfirm Correct and clean up gen_Abs() for SPARC: The Sub was the wrong way round. [r27885] --- diff --git a/ir/be/sparc/sparc_transform.c b/ir/be/sparc/sparc_transform.c index cb268473a..6545d7373 100644 --- a/ir/be/sparc/sparc_transform.c +++ b/ir/be/sparc/sparc_transform.c @@ -442,36 +442,23 @@ static ir_node *gen_Quot(ir_node *node) new_bd_sparc_fdiv_d, new_bd_sparc_fdiv_q); } -/** - * transform abs node: - * mov a, b - * sra b, 31, b - * xor a, b - * sub a, b - * - * @return - */ -static ir_node *gen_Abs(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); - ir_mode *mode = get_irn_mode(node); - dbg_info *dbgi = get_irn_dbg_info(node); - ir_node *op = get_Abs_op(node); - - ir_node *mov, *sra, *xor, *sub, *new_op; +static ir_node *gen_Abs(ir_node *node) +{ + ir_mode *const mode = get_irn_mode(node); if (mode_is_float(mode)) { return gen_helper_binfpop(node, mode, new_bd_sparc_fabs_s, new_bd_sparc_fdiv_d, new_bd_sparc_fdiv_q); + } else { + ir_node *const block = be_transform_node(get_nodes_block(node)); + dbg_info *const dbgi = get_irn_dbg_info(node); + ir_node *const op = get_Abs_op(node); + ir_node *const new_op = be_transform_node(op); + ir_node *const sra = new_bd_sparc_Sra_imm(dbgi, block, new_op, 31); + ir_node *const xor = new_bd_sparc_Xor_reg(dbgi, block, new_op, sra); + ir_node *const sub = new_bd_sparc_Sub_reg(dbgi, block, xor, sra); + return sub; } - - new_op = be_transform_node(op); - - mov = new_bd_sparc_Mov_reg(dbgi, block, new_op); - sra = new_bd_sparc_Sra_imm(dbgi, block, mov, 31); - xor = new_bd_sparc_Xor_reg(dbgi, block, new_op, sra); - sub = new_bd_sparc_Sub_reg(dbgi, block, sra, xor); - - return sub; } /**