示例#1
0
static void
readin_conf_stat(struct rk_conference *c)
{
	struct rk_aux_item *rai;
	int i, len;

	c->rc_name = get_string();
	c->rc_type = get_bitfield();
	read_in_time(&c->rc_creation_time);
	read_in_time(&c->rc_last_written);
	c->rc_creator = get_int();
	c->rc_presentation = get_int();
	c->rc_supervisor = get_int();
	c->rc_permitted_submitters = get_int();
	c->rc_super_conf = get_int();
	c->rc_msg_of_day = get_int();
	c->rc_nice = get_int();
	c->rc_keep_commented = get_int();
	c->rc_no_of_members = get_int();
	c->rc_first_local_no = get_int();
	c->rc_no_of_texts = get_int();
	c->rc_expire = get_int();

	c->rc_aux_item.rc_aux_item_len = len = get_int();
	if (len) {
		rai = calloc(sizeof(struct rk_aux_item), len);
		c->rc_aux_item.rc_aux_item_val = rai;
		get_accept('{');
		for (i = 0; i < len; i++)
			read_in_aux_item(&rai[i]);
		get_accept('}');
	} else
		get_accept('*');
	get_accept('\n');
}
示例#2
0
文件: runtime.c 项目: osa1/racket.rkt
void cheney()
{
    free_ptr = tospace_begin;

    {
        // Step 1: Copy roots.
        int64_t** work_ptr = (int64_t**)rootstack_begin;

        while ((void*)work_ptr != (void*)rootstack_ptr)
        {
            if (in_fromspace((void*)(*work_ptr)))
                copy_vector(work_ptr);
            work_ptr++;
        }
    }

    {
        // Step 2: Scan copied roots.
        int64_t* work_ptr = (int64_t*)tospace_begin;

        while ((void*)work_ptr != (void*)free_ptr)
        {
            int64_t info = *work_ptr;
            int fields = get_length(info);
            int64_t bitfield = get_bitfield(info);

            for (int i = 0; i < fields; ++i)
            {
                if ((bitfield & (1 << i)) != 0)
                {
                    // found a pointer
                    int64_t** ptr = (int64_t**)(work_ptr + 1 + i);

                    if (in_fromspace((void*)(*ptr)))
                        copy_vector(ptr);
                }
            }

            work_ptr += 1 + fields;
        }
    }

    // Step 3: Swap to/from spaces
    void* tmp = tospace_begin;
    tospace_begin = fromspace_begin;
    fromspace_begin = tmp;

    tmp = tospace_end;
    tospace_end = fromspace_end;
    fromspace_end = tmp;

#ifndef NDEBUG
    memset((void*)tospace_begin, 0, (size_t)(tospace_end - tospace_begin));
#endif
}
示例#3
0
文件: runtime.c 项目: osa1/racket.rkt
uint64_t eq_dynamic(uint64_t* ptr1, uint64_t* ptr2)
{
    uint64_t ptr1_tag = *ptr1;
    uint64_t ptr2_tag = *ptr2;

    if (ptr1_tag != ptr2_tag)
        return 0;

    int ptr1_len = get_length(ptr1_tag);
    int ptr2_len = get_length(ptr2_tag);

    if (ptr1_len != ptr2_len)
        return 0;

    int64_t ptr1_bitfield = get_bitfield(ptr1_tag);
    int64_t ptr2_bitfield = get_bitfield(ptr2_tag);

    if (ptr1_bitfield != ptr2_bitfield)
        return 0;

    for (int i = 0; i < ptr1_len; i++)
    {
        if ((ptr1_bitfield & (1 << i)) != 0)
        {
            uint64_t* ptr1_field = *(uint64_t**)(ptr1 + 1 + i);
            uint64_t* ptr2_field = *(uint64_t**)(ptr2 + 1 + i);
            if (eq_dynamic(ptr1_field, ptr2_field) != 1)
                return 0;
        }
        else
        {
            if (*(ptr1 + 1 + i) != *(ptr2 + 1 + i))
                return 0;
        }
    }

    return 1;
}
示例#4
0
文件: runtime.c 项目: osa1/racket.rkt
void print_vector(int64_t* vector)
{
    int64_t info = *vector;

    if (is_forwarding(info))
    {
        printf("<vector: forwarding to: %p>\n", (void*)info);

        if (in_tospace((void*)info))
            printf("(%p is in tospace)\n", (void*)info);
        else if (in_fromspace((void*)info))
            printf("(%p is in fromspace)\n", (void*)info);
        else
            printf("(%p is not in fromspace or tospace)\n", (void*)info);

        if (info)
        {
            printf("%p: ", (void*)info);
            print_vector((int64_t*)info);
        }
    }
    else
    {
        int fields = get_length(info);
        int64_t bitfield = get_bitfield(info);

        printf("<vector (%p, ", (void*) vector);
        if (in_tospace((void*)vector))
            printf("in tospace):");
        else if (in_fromspace((void*)vector))
            printf("in fromspace):");
        else
            printf("\?\?\?):");

        for (int i = 0; i < fields; i++)
        {
            if ((bitfield & (1 << i)) != 0)
                printf(" ptr(%p, %s)",
                       (void*)(*(vector + 1 + i)),
                       in_fromspace((void*)(*(vector + 1 + i))) ? "in fromspace" : "in tospace");
            else
                printf(" %" PRIi64, *(vector + 1 + i));
        }
        printf(">\n");
    }
}
示例#5
0
文件: raminit.c 项目: 0ida/coreboot
static u16 get_ddr3_mem_reg_col(u16 reg)
{
	return get_bitfield(reg, 3, 0);
}
示例#6
0
文件: raminit.c 项目: 0ida/coreboot
static u16 get_ddr3_mem_reg_c1m(u16 reg)
{
	return get_bitfield(reg, 1, 13);
}
示例#7
0
文件: raminit.c 项目: 0ida/coreboot
static u16 get_ddr3_mem_reg_size(u16 reg)
{
	return get_bitfield(reg, 4, 8);
}
示例#8
0
文件: raminit.c 项目: 0ida/coreboot
static u16 get_ddr3_mem_reg_row(u16 reg)
{
	return get_bitfield(reg, 3, 5);
}
示例#9
0
文件: read.c 项目: kal667/bitfield-c
float bitfield_parse_float(const uint8_t source[], const uint16_t source_length,
        const uint8_t bit_offset, const uint8_t bit_size, const float factor,
        const float offset) {
    return decode_float(get_bitfield(source, source_length, bit_offset, bit_size),
            factor, offset);
}