asm: assembler: implement label creation and resolution

This commit is contained in:
2025-05-14 16:27:22 +01:00
parent 6399022cb3
commit a35ae51b2f
4 changed files with 252 additions and 30 deletions

View File

@@ -2,10 +2,11 @@
#define _ASSEMBLER_ASSEMBLER_H_
#include <ivy/asm/assembler.h>
#include <stdint.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;
@@ -17,36 +18,45 @@ struct assembler_scope {
struct assembler_scope_type {
size_t s_scope_size;
enum ivy_status(*s_init_scope)(
struct ivy_assembler *,
struct assembler_scope *,
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_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 *,
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_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 *,
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 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
#endif