}
/**
- * Emits code for Copy.
+ * Emits code for Copy/CopyKeep.
*/
-static void emit_be_Copy(const ir_node *irn, ia32_emit_env_t *emit_env) {
- FILE *F = emit_env->out;
+static void Copy_emitter(const ir_node *irn, ir_node *op, ia32_emit_env_t *emit_env) {
+ FILE *F = emit_env->out;
const arch_env_t *aenv = emit_env->arch_env;
char cmd_buf[SNPRINTF_BUF_LEN], cmnt_buf[SNPRINTF_BUF_LEN];
- if (REGS_ARE_EQUAL(arch_get_irn_register(aenv, irn), arch_get_irn_register(aenv, be_get_Copy_op(irn))) ||
- be_is_unknown_reg(arch_get_irn_register(aenv, be_get_Copy_op(irn))))
+ if (REGS_ARE_EQUAL(arch_get_irn_register(aenv, irn), arch_get_irn_register(aenv, op)) ||
+ be_is_unknown_reg(arch_get_irn_register(aenv, op)))
return;
if (mode_is_float(get_irn_mode(irn)))
IA32_DO_EMIT(irn);
}
+static void emit_be_Copy(const ir_node *irn, ia32_emit_env_t *emit_env) {
+ Copy_emitter(irn, be_get_Copy_op(irn), emit_env);
+}
+
+static void emit_be_CopyKeep(const ir_node *irn, ia32_emit_env_t *emit_env) {
+ Copy_emitter(irn, be_get_CopyKeep_op(irn), emit_env);
+}
+
/**
* Emits code for exchange.
*/
BE_EMIT(IncSP);
BE_EMIT(SetSP);
BE_EMIT(Copy);
+ BE_EMIT(CopyKeep);
BE_EMIT(Perm);
BE_EMIT(Return);