mie: ir: register: implement moving and cleanup of mie_register_use
This commit is contained in:
@@ -62,8 +62,13 @@ struct mie_register {
|
||||
};
|
||||
|
||||
extern struct mie_vector_ops mie_register_vector_ops;
|
||||
extern struct mie_vector_ops mie_register_use_vector_ops;
|
||||
|
||||
MIE_API void mie_register_move(struct mie_register *dest, struct mie_register *src);
|
||||
MIE_API void mie_register_cleanup(struct mie_register *reg);
|
||||
|
||||
MIE_API void mie_register_use_move(
|
||||
struct mie_register_use *dest, struct mie_register_use *src);
|
||||
MIE_API void mie_register_use_cleanup(struct mie_register_use *reg);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
#include <assert.h>
|
||||
#include <blue/core/queue.h>
|
||||
#include <mie/ir/register.h>
|
||||
|
||||
static enum mie_status cleanup(void *p)
|
||||
static enum mie_status reg_cleanup(void *p)
|
||||
{
|
||||
mie_register_cleanup(p);
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
static enum mie_status move(void *dst, void *src, size_t itemsz)
|
||||
static enum mie_status reg_move(void *dst, void *src, size_t itemsz)
|
||||
{
|
||||
assert(itemsz == sizeof(struct mie_register));
|
||||
struct mie_register *dest_reg = dst, *src_reg = src;
|
||||
@@ -15,9 +16,23 @@ static enum mie_status move(void *dst, void *src, size_t itemsz)
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
static enum mie_status reg_use_cleanup(void *p)
|
||||
{
|
||||
mie_register_use_cleanup(p);
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
static enum mie_status reg_use_move(void *dst, void *src, size_t itemsz)
|
||||
{
|
||||
assert(itemsz == sizeof(struct mie_register_use));
|
||||
struct mie_register_use *dest_reg = dst, *src_reg = src;
|
||||
mie_register_use_move(dest_reg, src_reg);
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
struct mie_vector_ops mie_register_vector_ops = {
|
||||
.v_destroy = cleanup,
|
||||
.v_move = move,
|
||||
.v_destroy = reg_cleanup,
|
||||
.v_move = reg_move,
|
||||
};
|
||||
|
||||
void mie_register_move(struct mie_register *dest, struct mie_register *src)
|
||||
@@ -35,3 +50,20 @@ void mie_register_cleanup(struct mie_register *reg)
|
||||
mie_name_destroy(®->reg_name);
|
||||
}
|
||||
}
|
||||
|
||||
void mie_register_use_move(
|
||||
struct mie_register_use *dest, struct mie_register_use *src)
|
||||
{
|
||||
memmove(dest, src, sizeof *dest);
|
||||
|
||||
if (src->u_reg) {
|
||||
b_queue_move(&src->u_reg->reg_use, &src->u_entry, &dest->u_entry);
|
||||
}
|
||||
}
|
||||
|
||||
void mie_register_use_cleanup(struct mie_register_use *use)
|
||||
{
|
||||
if (use->u_reg) {
|
||||
b_queue_delete(&use->u_reg->reg_use, &use->u_entry);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user