#include "jit-internal.h"
#include "jit-reg-class.h"
#include <stdarg.h>
_jit_regclass_t *
_jit_regclass_create(const char *name, int flags, int num_regs, ...)
{
_jit_regclass_t *regclass;
va_list args;
int reg;
regclass = jit_malloc(sizeof(_jit_regclass_t) + sizeof(int) * (num_regs - 1));
if(!regclass)
{
return 0;
}
regclass->name = name;
regclass->flags = flags;
regclass->num_regs = num_regs;
va_start(args, num_regs);
for(reg = 0; reg < num_regs; reg++)
{
regclass->regs[reg] = va_arg(args, int);
}
va_end(args);
return regclass;
}
_jit_regclass_t *
_jit_regclass_combine(const char *name, int flags,
_jit_regclass_t *class1,
_jit_regclass_t *class2)
{
_jit_regclass_t *regclass;
int num_regs;
num_regs = class1->num_regs + class2->num_regs;
regclass = jit_malloc(sizeof(_jit_regclass_t) + sizeof(int) * (num_regs - 1));
if(!regclass)
{
return 0;
}
regclass->name = name;
regclass->flags = flags;
regclass->num_regs = num_regs;
jit_memcpy(regclass->regs, class1->regs, sizeof(int) * class1->num_regs);
jit_memcpy(regclass->regs + class1->num_regs, class2->regs, sizeof(int) * class2->num_regs);
return regclass;
}
void
_jit_regclass_free(_jit_regclass_t *regclass)
{
jit_free(regclass);
}