2009-11-07 17:16:09 -05:00
|
|
|
namespace factor
|
|
|
|
{
|
|
|
|
|
|
|
|
/* The compiled code heap is structured into blocks. */
|
|
|
|
struct code_block
|
|
|
|
{
|
|
|
|
cell header;
|
|
|
|
cell owner; /* tagged pointer to word, quotation or f */
|
|
|
|
cell literals; /* tagged pointer to array or f */
|
|
|
|
cell relocation; /* tagged pointer to byte-array or f */
|
|
|
|
|
|
|
|
bool free_p() const
|
|
|
|
{
|
|
|
|
return header & 1 == 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
code_block_type type() const
|
|
|
|
{
|
|
|
|
return (code_block_type)((header >> 1) & 0x3);
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_type(code_block_type type)
|
|
|
|
{
|
|
|
|
header = ((header & ~0x7) | (type << 1));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool pic_p() const
|
|
|
|
{
|
|
|
|
return type() == code_block_pic;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool optimized_p() const
|
|
|
|
{
|
|
|
|
return type() == code_block_optimized;
|
|
|
|
}
|
|
|
|
|
|
|
|
cell size() const
|
|
|
|
{
|
|
|
|
return header & ~7;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *xt() const
|
|
|
|
{
|
|
|
|
return (void *)(this + 1);
|
|
|
|
}
|
2009-11-24 22:36:35 -05:00
|
|
|
|
|
|
|
void flush_icache()
|
|
|
|
{
|
|
|
|
factor::flush_icache((cell)this,size());
|
|
|
|
}
|
2009-11-07 17:16:09 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|