constpool values must be defined in ascending sequence, each index must be greater than the last. any gaps in the sequence will automatically be filled with null values.
63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
#ifndef _ASSEMBLER_ASSEMBLER_H_
|
|
#define _ASSEMBLER_ASSEMBLER_H_
|
|
|
|
#include <ivy/asm/assembler.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
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, size_t, 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
|