From: Michael Beck Date: Sat, 2 Jun 2007 00:55:10 +0000 (+0000) Subject: initial support for exception handling X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=c0b48fb29a118ca99c85786c43c91389d9a82f84;p=libfirm initial support for exception handling [r14264] --- diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 0d00a3c0c..459ebf04a 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -1229,28 +1229,31 @@ static ir_node *generate_DivMod(ia32_transform_env_t *env, ir_node *node, ir_node *in_keep[2]; ir_node *mem, *new_mem; ir_node *projs[pn_DivMod_max]; - int i; + int i, has_exc; ia32_collect_Projs(node, projs, pn_DivMod_max); - proj_div = NULL; - proj_mod = NULL; + proj_div = proj_mod = NULL; + has_exc = 0; switch (dm_flav) { case flavour_Div: mem = get_Div_mem(node); mode = get_Div_resmode(node); proj_div = be_get_Proj_for_pn(node, pn_Div_res); + has_exc = be_get_Proj_for_pn(node, pn_Div_X_except) != NULL; break; case flavour_Mod: mem = get_Mod_mem(node); mode = get_Mod_resmode(node); proj_mod = be_get_Proj_for_pn(node, pn_Mod_res); + has_exc = be_get_Proj_for_pn(node, pn_Mod_X_except) != NULL; break; case flavour_DivMod: mem = get_DivMod_mem(node); mode = get_DivMod_resmode(node); proj_div = be_get_Proj_for_pn(node, pn_DivMod_res_div); proj_mod = be_get_Proj_for_pn(node, pn_DivMod_res_mod); + has_exc = be_get_Proj_for_pn(node, pn_DivMod_X_except) != NULL; break; default: panic("invalid divmod flavour!"); @@ -1274,6 +1277,8 @@ static ir_node *generate_DivMod(ia32_transform_env_t *env, ir_node *node, res = new_rd_ia32_Div(dbgi, irg, block, noreg, noreg, new_dividend, edx_node, new_divisor, new_mem, dm_flav); } + set_ia32_exc_label(res, has_exc); + /* Matze: code can't handle this at the moment... */ #if 0 /* set AM support */