- /* Store arg */
- frame = get_irg_frame(irg);
-
- /* store first arg (low part) */
- store_l = new_rd_ia32_l_Store(dbg, irg, block, frame, a_l, get_irg_no_mem(irg));
- set_ia32_frame_ent(store_l, ent);
- set_ia32_use_frame(store_l);
- set_ia32_ls_mode(store_l, get_irn_mode(a_l));
- op_mem[0] = store_l;
-
- /* store second arg (high part) */
- store_h = new_rd_ia32_l_Store(dbg, irg, block, frame, a_h, get_irg_no_mem(irg));
- set_ia32_frame_ent(store_h, ent);
- add_ia32_am_offs_int(store_h, gp_bytes);
- set_ia32_use_frame(store_h);
- set_ia32_ls_mode(store_h, get_irn_mode(a_h));
- op_mem[1] = store_h;
-
- mem = new_r_Sync(irg, block, 2, op_mem);
-
- /* Load arg into x87 FPU (implicit convert) */
- fres = new_rd_ia32_l_vfild(dbg, irg, block, frame, mem);
- set_ia32_frame_ent(fres, ent);
- set_ia32_use_frame(fres);
- set_ia32_ls_mode(fres, mode_D);
- mem = new_r_Proj(irg, block, fres, mode_M, pn_ia32_l_vfild_M);
- fres = new_r_Proj(irg, block, fres, fres_mode, pn_ia32_l_vfild_res);
-
- /*
- Now we create a node to move the loaded value into a XMM
- register because it is unknown here, which FPU is used.
- This node is killed in transformation phase when not needed.
- Otherwise it is split up into a fst + movsd
- */
- fres = new_rd_ia32_l_X87toSSE(dbg, irg, block, frame, fres, mem, fres_mode);
- set_ia32_frame_ent(fres, ent);
- set_ia32_use_frame(fres);
- set_ia32_ls_mode(fres, fres_mode);