static bblock_t BasicBlock_Add(KonohaContext *kctx, bblock_t blockId, kfileline_t uline, KVirtualCode *op, size_t size, size_t padding_size) { BasicBlock *bb = BasicBlock_FindById(kctx, blockId); DBG_ASSERT(bb->newid == -1); DBG_ASSERT(size <= padding_size); DBG_ASSERT(bb->nextid == -1 && bb->branchid == -1); if(!(bb->size + size < bb->max)) { size_t newsize = newsize2(bb->max); bb = new_BasicBlock(kctx, newsize, blockId); } memcpy(((char *)bb) + bb->size, op, size); bb->size += padding_size; return BasicBlock_id(kctx, bb); }
static bblock_t new_BasicBlockLABEL(KonohaContext *kctx) { BasicBlock *bb = new_BasicBlock(kctx, sizeof(KVirtualCode) * 2 + sizeof(BasicBlock), -1); return BasicBlock_id(kctx, bb); }