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_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_move(struct mie_register *dest, struct mie_register *src);
|
||||||
MIE_API void mie_register_cleanup(struct mie_register *reg);
|
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
|
#endif
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <blue/core/queue.h>
|
||||||
#include <mie/ir/register.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);
|
mie_register_cleanup(p);
|
||||||
return MIE_SUCCESS;
|
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));
|
assert(itemsz == sizeof(struct mie_register));
|
||||||
struct mie_register *dest_reg = dst, *src_reg = src;
|
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;
|
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 = {
|
struct mie_vector_ops mie_register_vector_ops = {
|
||||||
.v_destroy = cleanup,
|
.v_destroy = reg_cleanup,
|
||||||
.v_move = move,
|
.v_move = reg_move,
|
||||||
};
|
};
|
||||||
|
|
||||||
void mie_register_move(struct mie_register *dest, struct mie_register *src)
|
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);
|
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