X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch_t.h;h=b1702fd4fdc810f9335d2df62eae227dbd50b61a;hb=eba5516120eb38bcae5464e628aa0d2cb8708866;hp=82a40bf0a73e1c56ed9ae3b01263300da6468733;hpb=cf9c1673146d1f45d46ceb77eccfaf10fedff25d;p=libfirm diff --git a/ir/be/bearch_t.h b/ir/be/bearch_t.h index 82a40bf0a..b1702fd4f 100644 --- a/ir/be/bearch_t.h +++ b/ir/be/bearch_t.h @@ -406,24 +406,6 @@ struct arch_code_generator_t { const arch_code_generator_if_t *impl; }; -/** - * 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 */ -}; - -#define arch_env_stack_dir(env) ((env)->stack_dir) -#define arch_env_sp(env) ((env)->sp) -#define arch_env_bp(env) ((env)->bp) - /** * Architecture interface. */ @@ -540,16 +522,53 @@ 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); + + /** + * 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)) #define arch_env_get_n_reg_class(env) ((env)->impl->get_n_reg_class(env)) #define arch_env_get_reg_class(env,i) ((env)->impl->get_reg_class(env, i)) -#define arch_env_get_call_abi(env,tp,abi) ((env)->impl->get_call_abi((env), (tp), (abi))) #define arch_env_get_reg_class_for_mode(env,mode) ((env)->impl->get_reg_class_for_mode((env), (mode))) -#define arch_env_make_code_generator(env,irg) ((env)->impl->make_code_generator((env), (irg))) -#define arch_env_get_reg_class_alignment(env, cls) ((env)->impl->get_reg_class_alignment((env), (cls))) -#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_get_call_abi(env,tp,abi) ((env)->impl->get_call_abi((env), (tp), (abi))) +#define arch_env_get_code_generator_if(env) ((env)->impl->get_code_generator_if((env))) +#define arch_env_get_list_sched_selector(env,selector) ((env)->impl->get_list_sched_selector((env), (selector))) +#define arch_env_get_ilp_sched_selector(env) ((env)->impl->get_ilp_sched_selector(env)) +#define arch_env_get_reg_class_alignment(env,cls) ((env)->impl->get_reg_class_alignment((env), (cls))) +#define arch_env_get_params(env) ((env)->impl->get_params()) +#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)) + +/** + * 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; /** 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) +#define arch_env_sp(env) ((env)->sp) +#define arch_env_bp(env) ((env)->bp) #endif /* FIRM_BE_BEARCH_T_H */