2024-12-09 20:37:42 +00:00
|
|
|
#ifndef _ASSEMBLER_ASSEMBLER_H_
|
|
|
|
|
#define _ASSEMBLER_ASSEMBLER_H_
|
|
|
|
|
|
|
|
|
|
#include <ivy/asm/assembler.h>
|
|
|
|
|
#include <stddef.h>
|
2025-05-14 16:27:22 +01:00
|
|
|
#include <stdint.h>
|
2024-12-09 20:37:42 +00:00
|
|
|
|
|
|
|
|
struct assembler_scope_type;
|
2025-05-14 16:27:22 +01:00
|
|
|
struct ivy_asm_token;
|
2024-12-09 20:37:42 +00:00
|
|
|
|
|
|
|
|
struct assembler_scope {
|
|
|
|
|
enum ivy_assembler_scope_type s_type;
|
2024-12-10 22:27:26 +00:00
|
|
|
unsigned long s_attrib[__IVY_ASM_ATTRIB_COUNT];
|
2024-12-13 17:20:58 +00:00
|
|
|
const struct assembler_scope_type *s_ops;
|
2024-12-10 22:27:26 +00:00
|
|
|
size_t s_start_offset;
|
2024-12-09 20:37:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct assembler_scope_type {
|
|
|
|
|
size_t s_scope_size;
|
|
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
enum ivy_status (*s_init_scope)(
|
|
|
|
|
struct ivy_assembler *, struct assembler_scope *,
|
2024-12-10 22:27:26 +00:00
|
|
|
const ivy_assembler_attrib_table);
|
|
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
enum ivy_status (*s_finish_scope)(
|
|
|
|
|
struct ivy_assembler *, struct assembler_scope *);
|
2024-12-10 22:27:26 +00:00
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
enum ivy_status (*s_put_pval)(
|
|
|
|
|
struct ivy_assembler *, struct assembler_scope *,
|
|
|
|
|
enum ivy_assembler_pval_type, const void *,
|
2024-12-13 17:20:58 +00:00
|
|
|
ivy_extended_data_key *key);
|
2024-12-09 20:37:42 +00:00
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
enum ivy_status (*s_put_xval)(
|
|
|
|
|
struct ivy_assembler *, struct assembler_scope *,
|
|
|
|
|
enum ivy_assembler_xval_type, const ivy_assembler_attrib_table);
|
2024-12-10 22:27:26 +00:00
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
enum ivy_status (*s_put_instr)(
|
|
|
|
|
struct ivy_assembler *, struct assembler_scope *,
|
2024-12-10 22:27:26 +00:00
|
|
|
const struct ivy_instr *);
|
2025-05-14 16:27:22 +01:00
|
|
|
|
|
|
|
|
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);
|
2024-12-09 20:37:42 +00:00
|
|
|
};
|
|
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
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);
|
2024-12-10 22:27:26 +00:00
|
|
|
|
2024-12-13 12:26:01 +00:00
|
|
|
extern struct assembler_scope *assembler_get_scope(struct ivy_assembler *as);
|
|
|
|
|
|
2025-05-14 16:27:22 +01:00
|
|
|
#endif
|