op_flags => "L|F",
state => "exc_pinned",
comment => "construct Store without index: Store(ptr, val, mem) = ST ptr,val",
- reg_req => { in => [ "gp", "xmm", "none" ] },
- emit => '. mov%XXM %S1, %AM',
+ reg_req => { in => [ "gp", "gp", "xmm", "none" ] },
+ ins => [ "base", "index", "val", "mem" ],
+ emit => '. mov%XXM %S2, %AM',
latency => 2,
units => [ "SSE" ],
mode => "mode_M",
irn_flags => "I",
state => "exc_pinned",
comment => "load ST0 from stack",
- reg_req => { in => [ "gp", "none" ], out => [ "vf0", "none" ] },
+ reg_req => { in => [ "gp", "gp", "none" ], out => [ "vf0", "none" ] },
+ ins => [ "base", "index", "mem" ],
emit => '. fld%XM %AM',
outs => [ "res", "M" ],
latency => 2,
ir_mode *mode;
ir_node *frame, *sse_store, *fld, *mproj, *barrier;
ir_node *new_barrier, *new_ret_val, *new_ret_mem;
+ ir_node *noreg;
ir_node **in;
int pn_ret_val, pn_ret_mem, arity, i;
dbgi = get_irn_dbg_info(barrier);
block = transform_node(env, get_nodes_block(barrier));
+ noreg = ia32_new_NoReg_gp(env->cg);
+
/* store xmm0 onto stack */
- sse_store = new_rd_ia32_xStoreSimple(dbgi, irg, block, frame, new_ret_val, new_ret_mem);
+ sse_store = new_rd_ia32_xStoreSimple(dbgi, irg, block, frame, noreg, new_ret_val, new_ret_mem);
set_ia32_ls_mode(sse_store, mode);
set_ia32_op_type(sse_store, ia32_AddrModeD);
set_ia32_use_frame(sse_store);
set_ia32_am_support(sse_store, ia32_am_Dest);
/* load into st0 */
- fld = new_rd_ia32_SetST0(dbgi, irg, block, frame, sse_store);
+ fld = new_rd_ia32_SetST0(dbgi, irg, block, frame, noreg, sse_store);
set_ia32_ls_mode(fld, mode);
set_ia32_op_type(fld, ia32_AddrModeS);
set_ia32_use_frame(fld);