if (GC_TRIGGERGC)
if (VM.verboseGC)
  getnewblock (int ndx)   {  int i, save, size, location;  VM_Processor st = VM_Processor.getCurrentProcessor();  VM_SizeControl this_size = st.sizes[ndx];  VM_BlockControl alloc_block =     VM_Magic.addressAsBlockControl(blocks[this_size.current_block]);  // some debugging code in generational collector available if needed      // return -1 to indicate small object triggered gc.  sysLockBlock.lock();  if (first_freeblock == OUT_OF_BLOCKS) {  if (GC_TRIGGERGC)     VM_Scheduler.trace(" gc collection triggered by getnewblock call ", "XX");    sysLockBlock.release();    return -1;  }  alloc_block.nextblock = first_freeblock;  alloc_block = VM_Magic.addressAsBlockControl(blocks[first_freeblock]);  first_freeblock = alloc_block.nextblock;  // new first_freeblock  sysLockBlock.unlock();  alloc_block.nextblock = OUT_OF_BLOCKS;  // this is last block in list for thissize  alloc_block.slotsize  = GC_SIZEVALUES[ndx];  // size = GC_BLOCKSIZE/GC_SIZEVALUES[ndx];  // No. of entries in each array  // No. of entries in each array   size = GC_BLOCKSIZE/GC_SIZEVALUES[ndx] ;    // on first assignment of this block, get space from AIX  // for alloc array, for the size requested.    // If not first assignment, if the existing array is large enough for   // the new size, use them; else free the existing one, and get space   // for new one.  Keep the size for the currently allocated array in  // alloc_block.alloc_size.  This value only goes up during the running  // of the VM.  int temp;  if (alloc_block.mark != null) {    if (size <= alloc_block.alloc_size) {      VM_Magic.setMemoryWord(VM_Magic.objectAsAddress(alloc_block.mark) +       ARRAY_LENGTH_OFFSET, size);      return 0;    }    else {    // free the existing array space      VM.sysCall1(bootrecord.sysFreeIP,      VM_Magic.objectAsAddress(alloc_block.mark) - ARRAY_HEADER_SIZE);    }  }  temp = (size + ARRAY_HEADER_SIZE + 3) & ~3;  if ((location = VM.sysCall1(bootrecord.sysMallocIP, temp)) == 0) {    VM.sysWrite(" In getnewblock, call to sysMalloc returned 0 \n");    VM.sysExit(1800);  }  if (VM.VerifyAssertions) VM.assert((location & 3) == 0);// check full wd  alloc_block.alloc_size = size;  // remember allocated size  alloc_block.mark = VM_Magic.addressAsByteArray(location  + ARRAY_HEADER_SIZE);  // GET TIB POINTER FOR byte[] from VM_Magic.addressAsBlockControl(blocks[0]).Alloc  int byte_array_tib = VM_Magic.getMemoryWord(  VM_Magic.objectAsAddress(VM_Magic.addressAsBlockControl(blocks[0]).mark)     + OBJECT_TIB_OFFSET);  VM_Magic.setMemoryWord(VM_Magic.objectAsAddress(alloc_block.mark) +    OBJECT_TIB_OFFSET, byte_array_tib);  VM_Magic.setMemoryWord(VM_Magic.objectAsAddress(alloc_block.mark) +    ARRAY_LENGTH_OFFSET, size);  return 0;  }