#ifndef _ASSEMBLER_ASSEMBLER_H_ #define _ASSEMBLER_ASSEMBLER_H_ #include #include #include struct assembler_scope_type; struct ivy_asm_token; struct assembler_scope { enum ivy_assembler_scope_type s_type; unsigned long s_attrib[__IVY_ASM_ATTRIB_COUNT]; const struct assembler_scope_type *s_ops; size_t s_start_offset; }; struct assembler_scope_type { size_t s_scope_size; enum ivy_status (*s_init_scope)( struct ivy_assembler *, struct assembler_scope *, const ivy_assembler_attrib_table); enum ivy_status (*s_finish_scope)( struct ivy_assembler *, struct assembler_scope *); enum ivy_status (*s_put_pval)( struct ivy_assembler *, struct assembler_scope *, enum ivy_assembler_pval_type, const void *, ivy_extended_data_key *key); enum ivy_status (*s_put_xval)( struct ivy_assembler *, struct assembler_scope *, enum ivy_assembler_xval_type, const ivy_assembler_attrib_table); enum ivy_status (*s_put_instr)( struct ivy_assembler *, struct assembler_scope *, const struct ivy_instr *); enum ivy_status (*s_put_label)( struct ivy_assembler *, struct assembler_scope *, const struct ivy_asm_token *, size_t); enum ivy_status (*s_put_label_ref)( struct ivy_assembler *, struct assembler_scope *, const struct ivy_asm_token *, size_t); }; extern size_t assembler_write_data( struct ivy_assembler *as, const void *p, size_t len); extern ivy_extended_data_key assembler_write_extended_data( struct ivy_assembler *as, const void *p, size_t len); extern enum ivy_status assembler_read_data_at( struct ivy_assembler *as, void *p, size_t offset, size_t len, size_t *nr_read); extern size_t assembler_write_data_at( struct ivy_assembler *as, const void *p, size_t offset, size_t len); extern struct assembler_scope *assembler_get_scope(struct ivy_assembler *as); #endif