/* APPLE LOCAL file CW asm blocks */ #ifndef CONFIG_ASM_H #define CONFIG_ASM_H #include "cpplib.h" /* We use a small state machine to inform the lexer when to start returning tokens marking the beginning of each asm line. */ enum iasm_states { /* Normal code. */ iasm_none, /* '{' of asm block seen, decls may appear. */ iasm_decls, /* No more decls, in asm block proper, '}' not seen yet. */ iasm_asm }; /* Nonzero means that CodeWarrior-style inline assembler is to be parsed. */ extern int flag_iasm_blocks; extern enum iasm_states iasm_state; extern bool iasm_in_decl; extern bool inside_iasm_block; extern bool iasm_kill_regs; extern bool iasm_in_operands; extern tree iasm_do_id (tree); /* Maximum number of arguments. */ #define IASM_MAX_ARG 11 #ifndef TARGET_IASM_EXTRA_INFO #define TARGET_IASM_EXTRA_INFO #endif struct iasm_md_Extra_info { /* Number of operands to the ASM_expr. Note, this can be different from the number of operands to the instruction, in cases like: mov 0(foo,bar,4), $42 where foo and bar are C expressions. */ int num; struct { /* Constraints for operand to the ASM_EXPR. */ const char *constraint; tree var; unsigned int argnum; bool must_be_reg; bool was_output; } dat[IASM_MAX_ARG]; int num_rewrites; struct { int dat_index; char *arg_p; } rewrite[IASM_MAX_ARG]; bool no_label_map; const char *modifier; TARGET_IASM_EXTRA_INFO }; typedef struct iasm_md_Extra_info iasm_md_extra_info; void iasm_print_operand (char *buf, tree arg, unsigned argnum, tree *uses, bool must_be_reg, bool must_not_be_reg, iasm_md_extra_info *e); extern void iasm_stmt (tree, tree, int); extern tree iasm_build_register_offset (tree, tree); extern tree iasm_label (tree, bool); extern tree prepend_char_identifier (tree, char); extern tree iasm_reg_name (tree); extern void iasm_entry (int, tree); extern int iasm_typename_or_reserved (tree); extern tree iasm_c_build_component_ref (tree, tree); extern tree iasm_get_identifier (tree, const char *); extern tree iasm_build_bracket (tree, tree); extern bool iasm_is_prefix (tree); extern void iasm_skip_to_eol (void); extern bool iasm_memory_clobber (const char *); extern void iasm_force_constraint (const char *c, iasm_md_extra_info *e); extern tree iasm_ptr_conv (tree type, tree exp); extern void iasm_get_register_var (tree var, const char *modifier, char *buf, unsigned argnum, bool must_be_reg, iasm_md_extra_info *e); extern bool iasm_is_pseudo (const char *); extern tree iasm_addr (tree); extern void iasm_end_block (void); #endif