VM_Magic.setMemoryWord(isCopyAddress, ((temp & 0x00ffffff) | 0x01000000));
VM_Magic.setMemoryInt(isCopyAddress, ((temp & 0x00ffffff) | 0x01000000));
  private static VM_Address GetBooleanArrayElements(int envJREF, int arrayJREF, VM_Address isCopyAddress) {    if (traceJNI) VM.sysWrite("JNI called: GetBooleanArrayElements  \n");    VM_JNIEnvironment env;    try {      env = VM_Thread.getCurrentThread().getJNIEnv();      boolean sourceArray[] = (boolean []) env.getJNIRef(arrayJREF);      int size = sourceArray.length;      // alloc non moving buffer in C heap for a copy of string contents      VM_Address copyBuffer = VM_Address.fromInt(VM.sysCall1(VM_BootRecord.the_boot_record.sysMallocIP,                                                             size));      if(copyBuffer.isZero()) {        env.recordException(new OutOfMemoryError());        return VM_Address.zero();      }      VM_Memory.memcopy( copyBuffer, VM_Magic.objectAsAddress(sourceArray), size );      // set callers isCopy boolean to true, if it's a valid address      if (!isCopyAddress.isZero()) {        int temp = VM_Magic.getMemoryWord(isCopyAddress);        if (LittleEndian) {          VM_Magic.setMemoryWord(isCopyAddress, ((temp & 0xffffff00) | 0x00000001));        } else {          VM_Magic.setMemoryWord(isCopyAddress, ((temp & 0x00ffffff) | 0x01000000));        }      }      return copyBuffer;    } catch (Throwable unexpected) {      env = VM_Thread.getCurrentThread().getJNIEnv();      env.recordException(unexpected);      return VM_Address.zero();    }  }