public void init (VM_Processor st) {
public void init (VM_Processor st) throws VM_PragmaInterruptible {
  public void init (VM_Processor st) {    partialBlockList = new int[GC_SIZES];          // GSC    for (int i = 0; i<GC_SIZES; i++) {      partialBlockList[i] = OUT_OF_BLOCKS;    }    st.sizes = new VM_SizeControl[GC_SIZES];    init_blocks = new VM_BlockControl[GC_SIZES];    // On the jdk side, we allocate an array of VM_SizeControl Blocks,     // one for each size.    // We also allocate init_blocks array within the boot image.      // At runtime we allocate the rest of the BLOCK_CONTROLS, whose number     // depends on the heapsize, and copy the contents of init_blocks     // into the first GC_SIZES of them.    for (int i = 0; i < GC_SIZES; i++) {      st.sizes[i] = new VM_SizeControl();      init_blocks[i] = new VM_BlockControl();      st.sizes[i].first_block = i;  // 1 block/size initially      st.sizes[i].current_block = i;      st.sizes[i].ndx = i;      init_blocks[i].mark = new byte[GC_BLOCKSIZE/GC_SIZEVALUES[i] ];      for (int ii = 0; ii < GC_BLOCKSIZE/GC_SIZEVALUES[i]; ii++) {	init_blocks[i].mark[ii]  = 0;      }      init_blocks[i].nextblock= OUT_OF_BLOCKS;      init_blocks[i].slotsize = GC_SIZEVALUES[i];    }    // set up GC_INDEX_ARRAY for this Processor    st.GC_INDEX_ARRAY = new VM_SizeControl[GC_MAX_SMALL_SIZE + 1];    st.GC_INDEX_ARRAY[0] = st.sizes[0];  // for size = 0    for (int i = 0, j = 1; i < GC_SIZES; i++) {      for (; j <= GC_SIZEVALUES[i]; j++) {	st.GC_INDEX_ARRAY[j] = st.sizes[i];      }    }    st.backingSLHeap = this;  }