rtx get_hard_reg_initial_val (enum machine_mode mode, unsigned int regno) { struct initial_value_struct *ivs; rtx rv; rv = has_hard_reg_initial_val (mode, regno); if (rv) return rv; ivs = crtl->hard_reg_initial_vals; if (ivs == 0) { ivs = ggc_alloc_initial_value_struct (); ivs->num_entries = 0; ivs->max_entries = 5; ivs->entries = ggc_alloc_vec_initial_value_pair (5); crtl->hard_reg_initial_vals = ivs; } if (ivs->num_entries >= ivs->max_entries) { ivs->max_entries += 5; ivs->entries = GGC_RESIZEVEC (initial_value_pair, ivs->entries, ivs->max_entries); } ivs->entries[ivs->num_entries].hard_reg = gen_rtx_REG (mode, regno); ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (mode); return ivs->entries[ivs->num_entries++].pseudo; }
static void set_constant_entry (CPool *cpool, int index, int tag, jword value) { if (cpool->data == NULL) { cpool->capacity = 100; cpool->tags = ggc_cleared_vec_alloc<uint8> (cpool->capacity); cpool->data = ggc_cleared_vec_alloc<cpool_entry> (cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) { int old_cap = cpool->capacity; cpool->capacity *= 2; if (index >= cpool->capacity) cpool->capacity = index + 10; cpool->tags = GGC_RESIZEVEC (uint8, cpool->tags, cpool->capacity); cpool->data = GGC_RESIZEVEC (union cpool_entry, cpool->data, cpool->capacity); /* Make sure GC never sees uninitialized tag values. */ memset (cpool->tags + old_cap, 0, cpool->capacity - old_cap); memset (cpool->data + old_cap, 0, (cpool->capacity - old_cap) * sizeof (union cpool_entry)); }