ir_node *new_op2;
dbg_info *dbgi = get_irn_dbg_info(node);
-/*
- if (flags & MATCH_SIZE_NEUTRAL) {
- op1 = arm_skip_downconv(op1);
- op2 = arm_skip_downconv(op2);
- } else {
- assert(get_mode_size_bits(get_irn_mode(node)) == 32);
- }
-*/
if (is_imm_encodeable(op2)) {
ir_node *new_op1 = be_transform_node(op1);
return new_imm(dbgi, block, new_op1, get_tarval_long(get_Const_tarval(op2)));
ir_node *block = be_transform_node(get_nodes_block(node));
dbg_info *dbgi = get_irn_dbg_info(node);
- (void) block;
- (void) dbgi;
+ (void) block;
+ (void) dbgi;
if (mode_is_float(mode))
panic("FP not implemented yet");
panic("Unsupported Proj from Load");
}
- return be_duplicate_node(node);
+ return be_duplicate_node(node);
}
/**
long proj = get_Proj_proj(node);
(void) irg;
- (void) dbgi;
+ (void) dbgi;
if (is_Store(pred)) {
if (proj == pn_Store_M) {
}
}
- return be_duplicate_node(node);
+ return be_duplicate_node(node);
}
return new_bd_sparc_Jmp(dbgi, new_block);
}
-/**
- * the BAD transformer.
- */
-static ir_node *bad_transform(ir_node *irn)
-{
- panic("SPARC backend: Not implemented: %+F", irn);
-}
-
-/**
- * Set a node emitter. Make it a bit more type safe.
- */
-static void set_transformer(ir_op *op, be_transform_func sparc_transform_func)
-{
- op->ops.generic = (op_func)sparc_transform_func;
-}
-
/**
* configure transformation callbacks
*/
void sparc_register_transformers(void)
{
- clear_irp_opcodes_generic_func();
- set_transformer(op_Add, gen_Add);
- set_transformer(op_Store, gen_Store);
- set_transformer(op_Const, gen_Const);
- set_transformer(op_Load, gen_Load);
- set_transformer(op_Sub, gen_Sub);
-
- set_transformer(op_be_AddSP, gen_be_AddSP);
- set_transformer(op_be_SubSP, gen_be_SubSP);
- set_transformer(op_be_Copy, gen_be_Copy);
- set_transformer(op_be_Call, gen_be_Call);
- set_transformer(op_be_FrameAddr, gen_be_FrameAddr);
-
- set_transformer(op_Cond, gen_Cond);
- set_transformer(op_Cmp, gen_Cmp);
-
- set_transformer(op_SymConst, gen_SymConst);
-
- set_transformer(op_Phi, gen_Phi);
- set_transformer(op_Proj, gen_Proj);
-
- set_transformer(op_Conv, gen_Conv);
- set_transformer(op_Jmp, gen_Jmp);
-
- set_transformer(op_Mul, gen_Mul);
- set_transformer(op_Mulh, gen_Mulh);
- set_transformer(op_Div, gen_Div);
- set_transformer(op_Abs, gen_Abs);
- set_transformer(op_Shl, gen_Shl);
- set_transformer(op_Shr, gen_Shr);
- set_transformer(op_Shrs, gen_Shra);
-
- set_transformer(op_Minus, gen_Minus);
- set_transformer(op_Not, gen_Not);
- set_transformer(op_And, gen_And);
- set_transformer(op_Or, gen_Or);
- set_transformer(op_Eor, gen_Xor);
-
- set_transformer(op_Unknown, gen_Unknown);
-
- /* node list */
- /*
-
- set_transformer(op_CopyB, gen_CopyB);
- set_transformer(op_Quot, gen_Quot);
- set_transformer(op_Rotl, gen_Rotl);
- */
-
- set_transformer(op_ASM, bad_transform);
- set_transformer(op_Builtin, bad_transform);
- set_transformer(op_CallBegin, bad_transform);
- set_transformer(op_Cast, bad_transform);
- set_transformer(op_Confirm, bad_transform);
- set_transformer(op_DivMod, bad_transform);
- set_transformer(op_EndExcept, bad_transform);
- set_transformer(op_EndReg, bad_transform);
- set_transformer(op_Filter, bad_transform);
- set_transformer(op_Free, bad_transform);
- set_transformer(op_Id, bad_transform);
- set_transformer(op_InstOf, bad_transform);
-
- set_transformer(op_Mux, bad_transform);
- set_transformer(op_Raise, bad_transform);
- set_transformer(op_Sel, bad_transform);
- set_transformer(op_Tuple, bad_transform);
-}
-
-
-/**
- * Pre-transform all unknown nodes.
- */
-static void sparc_pretransform_node(void)
-{
- sparc_code_gen_t *cg = env_cg;
- (void) cg;
- //cg->unknown_gp = be_pre_transform_node(cg->unknown_gp);
- //cg->unknown_fpa = be_pre_transform_node(cg->unknown_fpa);
+ be_start_transform_setup();
+
+ be_set_transform_function(op_Abs, gen_Abs);
+ be_set_transform_function(op_Add, gen_Add);
+ be_set_transform_function(op_And, gen_And);
+ be_set_transform_function(op_be_AddSP, gen_be_AddSP);
+ be_set_transform_function(op_be_Call, gen_be_Call);
+ be_set_transform_function(op_be_Copy, gen_be_Copy);
+ be_set_transform_function(op_be_FrameAddr, gen_be_FrameAddr);
+ be_set_transform_function(op_be_SubSP, gen_be_SubSP);
+ be_set_transform_function(op_Cmp, gen_Cmp);
+ be_set_transform_function(op_Cond, gen_Cond);
+ be_set_transform_function(op_Const, gen_Const);
+ be_set_transform_function(op_Conv, gen_Conv);
+ be_set_transform_function(op_Div, gen_Div);
+ be_set_transform_function(op_Eor, gen_Xor);
+ be_set_transform_function(op_Jmp, gen_Jmp);
+ be_set_transform_function(op_Load, gen_Load);
+ be_set_transform_function(op_Minus, gen_Minus);
+ be_set_transform_function(op_Mul, gen_Mul);
+ be_set_transform_function(op_Mulh, gen_Mulh);
+ be_set_transform_function(op_Not, gen_Not);
+ be_set_transform_function(op_Or, gen_Or);
+ be_set_transform_function(op_Phi, gen_Phi);
+ be_set_transform_function(op_Proj, gen_Proj);
+ be_set_transform_function(op_Shl, gen_Shl);
+ be_set_transform_function(op_Shr, gen_Shr);
+ be_set_transform_function(op_Shrs, gen_Shra);
+ be_set_transform_function(op_Store, gen_Store);
+ be_set_transform_function(op_Sub, gen_Sub);
+ be_set_transform_function(op_SymConst, gen_SymConst);
+ be_set_transform_function(op_Unknown, gen_Unknown);
+
+ be_set_transform_function(op_sparc_Save, be_duplicate_node);
}
/**
{
sparc_register_transformers();
env_cg = cg;
- be_transform_graph(cg->irg, sparc_pretransform_node);
+ be_transform_graph(cg->irg, NULL);
}
void sparc_init_transform(void)