X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_intrinsics.c;h=738b66773d68e61e5ca48a3bc01dbb2894b4a9da;hb=6981dd3274e6753e50f66c8cbe17b37bd41708e5;hp=89c4a6a9b30d7066a8a1cc5affc59ec5d226752d;hpb=eb3692350976be4efea32417a503d91f1a761ba9;p=libfirm diff --git a/ir/be/ia32/ia32_intrinsics.c b/ir/be/ia32/ia32_intrinsics.c index 89c4a6a9b..738b66773 100644 --- a/ir/be/ia32/ia32_intrinsics.c +++ b/ir/be/ia32/ia32_intrinsics.c @@ -191,7 +191,7 @@ static int map_Shrs(ir_node *call, void *ctx) { l_res = new_rd_ia32_l_ShrD(dbg, irg, block, a_l, a_h, cnt, l_res_mode); /* h_res = SAR a_h, cnt */ - h_res = new_rd_ia32_l_Shrs(dbg, irg, block, a_h, cnt, h_res_mode); + h_res = new_rd_ia32_l_Sar(dbg, irg, block, a_h, cnt, h_res_mode); //add_irn_dep(h_res, l_res); @@ -225,13 +225,13 @@ static int map_Mul(ir_node *call, void *ctx) { t3 = a_l * b_h h_res = t2 + t3 */ - mul = new_rd_ia32_l_MulS(dbg, irg, block, a_l, b_l); - pEDX = new_rd_Proj(dbg, irg, block, mul, l_res_mode, pn_ia32_l_MulS_EDX); - l_res = new_rd_Proj(dbg, irg, block, mul, l_res_mode, pn_ia32_l_MulS_EAX); + mul = new_rd_ia32_l_Mul(dbg, irg, block, a_l, b_l); + pEDX = new_rd_Proj(dbg, irg, block, mul, l_res_mode, pn_ia32_l_Mul_EDX); + l_res = new_rd_Proj(dbg, irg, block, mul, l_res_mode, pn_ia32_l_Mul_EAX); - mul = new_rd_ia32_l_Mul(dbg, irg, block, a_h, b_l, h_res_mode); + mul = new_rd_ia32_l_Mul(dbg, irg, block, a_h, b_l); add = new_rd_ia32_l_Add(dbg, irg, block, mul, pEDX, h_res_mode); - mul = new_rd_ia32_l_Mul(dbg, irg, block, a_l, b_h, h_res_mode); + mul = new_rd_ia32_l_Mul(dbg, irg, block, a_l, b_h); h_res = new_rd_ia32_l_Add(dbg, irg, block, add, mul, h_res_mode); resolve_call(call, l_res, h_res, irg, block); @@ -298,9 +298,9 @@ static int map_Abs(ir_node *call, void *ctx) { */ - sign = new_rd_ia32_l_Shrs(dbg, irg, block, a_h, new_Const_long(h_res_mode, 31), h_res_mode); - sub_l = new_rd_ia32_l_Eor(dbg, irg, block, a_l, sign, l_res_mode); - sub_h = new_rd_ia32_l_Eor(dbg, irg, block, a_h, sign, h_res_mode); + sign = new_rd_ia32_l_Sar(dbg, irg, block, a_h, new_Const_long(h_res_mode, 31), h_res_mode); + sub_l = new_rd_ia32_l_Xor(dbg, irg, block, a_l, sign, l_res_mode); + sub_h = new_rd_ia32_l_Xor(dbg, irg, block, a_h, sign, h_res_mode); res = new_rd_ia32_Sub64Bit(dbg, irg, block, sub_l, sub_h, sign, sign); l_res = new_r_Proj(irg, block, res, l_res_mode, pn_ia32_Sub64Bit_low_res); h_res = new_r_Proj(irg, block, res, h_res_mode, pn_ia32_Sub64Bit_high_res); @@ -376,7 +376,7 @@ static int DivMod_mapper(ir_node *call, void *ctx, ia32_intrinsic_divmod_t dmtp) set_ia32_use_frame(fa); set_ia32_ls_mode(fa, mode_D); fa_mem = new_r_Proj(irg, block, fa, mode_M, pn_ia32_l_vfild_M); - fa = new_r_Proj(irg, block, fa, mode_D, pn_ia32_l_vfild_res); + fa = new_r_Proj(irg, block, fa, mode_E, pn_ia32_l_vfild_res); /* store second arg */ store_l = new_rd_ia32_l_Store(dbg, irg, block, frame, b_l, get_irg_no_mem(irg)); @@ -400,7 +400,7 @@ static int DivMod_mapper(ir_node *call, void *ctx, ia32_intrinsic_divmod_t dmtp) set_ia32_use_frame(fb); set_ia32_ls_mode(fb, mode_D); fb_mem = new_r_Proj(irg, block, fb, mode_M, pn_ia32_l_vfild_M); - fb = new_r_Proj(irg, block, fb, mode_D, pn_ia32_l_vfild_res); + fb = new_r_Proj(irg, block, fb, mode_E, pn_ia32_l_vfild_res); op_mem[0] = fa_mem; op_mem[1] = fb_mem; @@ -411,10 +411,10 @@ static int DivMod_mapper(ir_node *call, void *ctx, ia32_intrinsic_divmod_t dmtp) switch (dmtp) { case IA32_INTRINSIC_DIV: fres = new_rd_ia32_l_vfdiv(dbg, irg, block, fa, fb); - fres = new_rd_Proj(dbg, irg, block, fres, mode_D, pn_ia32_l_vfdiv_res); + fres = new_rd_Proj(dbg, irg, block, fres, mode_E, pn_ia32_l_vfdiv_res); break; case IA32_INTRINSIC_MOD: - fres = new_rd_ia32_l_vfprem(dbg, irg, block, fa, fb, mode_D); + fres = new_rd_ia32_l_vfprem(dbg, irg, block, fa, fb, mode_E); break; default: assert(0);