X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch_t.h;h=efba49542a4c8edb7df33677cf1199a8ca867855;hb=dd4cd761ab637d4488c7e29f49843b1b02366acf;hp=1e7c93befd16b2169ab923b68d085da29dc77ebc;hpb=2896b2261b1f54df233305e72dfe4591ab966f6f;p=libfirm diff --git a/ir/be/bearch_t.h b/ir/be/bearch_t.h index 1e7c93bef..efba49542 100644 --- a/ir/be/bearch_t.h +++ b/ir/be/bearch_t.h @@ -522,6 +522,24 @@ struct arch_isa_if_t { * @return A flexible array ARR_F containing all desired irgs in the desired order. */ ir_graph **(*get_backend_irg_list)(const void *self, ir_graph ***irgs); + + /** + * mark node as rematerialized + */ + void (*mark_remat)(const void *self, ir_node *node); + + /** + * parse an assembler constraint part and set flags according to its nature + * advances the *c pointer to point to the last parsed character (so if you + * parse a single character don't advance c) + */ + asm_constraint_flags_t (*parse_asm_constraint)(const void *self, const char **c); + + /** + * returns true if the string is a valid clobbered (register) in this + * backend + */ + int (*is_valid_clobber)(const void *self, const char *clobber); }; #define arch_env_done(env) ((env)->impl->done(env)) @@ -537,19 +555,23 @@ struct arch_isa_if_t { #define arch_env_get_allowed_execution_units(env,irn) ((env)->impl->get_allowed_execution_units((env), (irn))) #define arch_env_get_machine(env) ((env)->impl->get_machine(env)) #define arch_env_get_backend_irg_list(env,irgs) ((env)->impl->get_backend_irg_list((env), (irgs))) +#define arch_env_parse_asm_constraint(env,c) ((env)->impl->parse_asm_constraint((env), (c)) +#define arch_env_is_valid_clobber(env,clobber) ((env)->impl->is_valid_clobber((env), (clobber)) +#define arch_env_mark_remat(env,node) \ + do { if ((env)->impl->mark_remat != NULL) (env)->impl->mark_remat((env), (node)); } while(0) /** * ISA base class. */ struct arch_env_t { const arch_isa_if_t *impl; - const arch_register_t *sp; /** The stack pointer register. */ - const arch_register_t *bp; /** The base pointer register. */ - int stack_dir; /** -1 for decreasing, 1 for increasing. */ - int stack_alignment; /** stack alignment */ - const be_main_env_t *main_env; /** the be main environment */ - int spill_cost; /** cost for a be_Spill node */ - int reload_cost; /** cost for a be_Reload node */ + const arch_register_t *sp; /** The stack pointer register. */ + const arch_register_t *bp; /** The base pointer register. */ + int stack_dir; /** -1 for decreasing, 1 for increasing. */ + int stack_alignment; /** power of 2 stack alignment */ + const be_main_env_t *main_env; /** the be main environment */ + int spill_cost; /** cost for a be_Spill node */ + int reload_cost; /** cost for a be_Reload node */ }; #define arch_env_stack_dir(env) ((env)->stack_dir)