// Inform CodeBuffer that incoming code and relocation will be for stubs address AbstractAssembler::start_a_stub(int required_space) { CodeBuffer* cb = code(); CodeSection* cs = cb->stubs(); assert(_code_section == cb->insts(), "not in insts?"); if (cs->maybe_expand_to_ensure_remaining(required_space) && cb->blob() == NULL) { return NULL; } set_code_section(cs); return pc(); }
// Inform CodeBuffer that incoming code and relocation will be for stubs address AbstractAssembler::start_a_const(int required_space, int required_align) { CodeBuffer* cb = code(); CodeSection* cs = cb->consts(); assert(_code_section == cb->insts() || _code_section == cb->stubs(), "not in insts/stubs?"); address end = cs->end(); int pad = -(intptr_t)end & (required_align-1); if (cs->maybe_expand_to_ensure_remaining(pad + required_space)) { if (cb->blob() == NULL) return NULL; end = cs->end(); // refresh pointer } if (pad > 0) { while (--pad >= 0) { *end++ = 0; } cs->set_end(end); } set_code_section(cs); return end; }
// Inform CodeBuffer that incoming code and relocation will be code // Should not be called if start_a_stub() returned NULL void AbstractAssembler::end_a_stub() { assert(_code_section == code()->stubs(), "not in stubs?"); set_code_section(code()->insts()); }
// Inform CodeBuffer that incoming code and relocation will be code // in section cs (insts or stubs). void AbstractAssembler::end_a_const(CodeSection* cs) { assert(_code_section == code()->consts(), "not in consts?"); set_code_section(cs); }
// Inform CodeBuffer that incoming code and relocation will be code // Should not be called if start_a_const() returned NULL void AbstractAssembler::end_a_const() { assert(_code_section == code()->consts(), "not in consts?"); sync(); set_code_section(code()->insts()); }