From 295c48f4548cf88c9baf82674f204ec83faf2e50 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Wed, 23 Apr 2008 11:58:34 +0000 Subject: [PATCH] Move the if-not-AM-input of ia32 Div and IDiv to slot 3 to make it more unop-like. [r19368] --- ir/be/ia32/ia32_spec.pl | 13 ++++++------- ir/be/ia32/ia32_transform.c | 8 ++++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ir/be/ia32/ia32_spec.pl b/ir/be/ia32/ia32_spec.pl index 84c2425bf..921055aed 100644 --- a/ir/be/ia32/ia32_spec.pl +++ b/ir/be/ia32/ia32_spec.pl @@ -214,7 +214,6 @@ $arch = "ia32"; AM => "${arch}_emit_am(node);", unop3 => "${arch}_emit_unop(node, 3);", unop4 => "${arch}_emit_unop(node, 4);", - unop5 => "${arch}_emit_unop(node, 5);", binop => "${arch}_emit_binop(node);", x87_binop => "${arch}_emit_x87_binop(node);", CMP0 => "${arch}_emit_cmp_suffix_node(node, 0);", @@ -668,12 +667,12 @@ l_Sbb => { IDiv => { op_flags => "F|L", state => "exc_pinned", - reg_req => { in => [ "gp", "gp", "none", "eax", "edx", "gp" ], + reg_req => { in => [ "gp", "gp", "none", "gp", "eax", "edx" ], out => [ "eax", "flags", "none", "edx", "none" ] }, - ins => [ "base", "index", "mem", "left_low", "left_high", "right" ], + ins => [ "base", "index", "mem", "divisor", "dividend_low", "dividend_high" ], outs => [ "div_res", "flags", "M", "mod_res", "X_exc" ], am => "source,ternary", - emit => ". idiv%M %unop5", + emit => ". idiv%M %unop3", latency => 25, units => [ "GP" ], modified_flags => $status_flags @@ -682,12 +681,12 @@ IDiv => { Div => { op_flags => "F|L", state => "exc_pinned", - reg_req => { in => [ "gp", "gp", "none", "eax", "edx", "gp" ], + reg_req => { in => [ "gp", "gp", "none", "gp", "eax", "edx" ], out => [ "eax", "flags", "none", "edx", "none" ] }, - ins => [ "base", "index", "mem", "left_low", "left_high", "right" ], + ins => [ "base", "index", "mem", "divisor", "dividend_low", "dividend_high" ], outs => [ "div_res", "flags", "M", "mod_res", "X_exc" ], am => "source,ternary", - emit => ". div%M %unop5", + emit => ". div%M %unop3", latency => 25, units => [ "GP" ], modified_flags => $status_flags diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 9edaf4b24..60814e532 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -1485,15 +1485,15 @@ static ir_node *create_Div(ir_node *node) produceval); new_node = new_rd_ia32_IDiv(dbgi, irg, new_block, addr->base, - addr->index, new_mem, am.new_op1, - sign_extension, am.new_op2); + addr->index, new_mem, am.new_op2, + am.new_op1, sign_extension); } else { sign_extension = new_rd_ia32_Const(dbgi, irg, new_block, NULL, 0, 0); add_irn_dep(sign_extension, get_irg_frame(irg)); new_node = new_rd_ia32_Div(dbgi, irg, new_block, addr->base, - addr->index, new_mem, am.new_op1, - sign_extension, am.new_op2); + addr->index, new_mem, am.new_op2, + am.new_op1, sign_extension); } set_irn_pinned(new_node, get_irn_pinned(node)); -- 2.20.1