int loword = VM_Magic.getMemoryWord(addr);
int loword = VM_Magic.getMemoryInt(addr);
  static Object[] packageParameterFromJValue(VM_Method targetMethod, VM_Address argAddress) {    VM_TypeReference[] argTypes = targetMethod.getParameterTypes();    int argCount = argTypes.length;    Object[] argObjectArray = new Object[argCount];    // get the VM_JNIEnvironment for this thread in case we need to dereference any object arg    VM_JNIEnvironment env = VM_Thread.getCurrentThread().getJNIEnv();    // VM.sysWrite("JNI packageParameterFromJValue: packaging " + argCount + " arguments\n");    VM_Address addr = argAddress;    for (int i=0; i<argCount; i++, addr = addr.add(8)) {      int loword = VM_Magic.getMemoryWord(addr);      int hiword;      // VM.sysWrite("JNI packageParameterFromJValue:  arg " + i + " = " + loword +       //  " or " + VM.intAsHexString(loword) + ", at address " +       //	  VM.intAsHexString(addr) + "\n");      // convert and wrap the argument according to the expected type      if (argTypes[i].isFloatType()) {	argObjectArray[i] = VM_Reflection.wrapFloat(Float.intBitsToFloat(loword));      } else if (argTypes[i].isDoubleType()) {	hiword = VM_Magic.getMemoryWord(addr.add(4));	long doubleBits = (((long) hiword) << 32) | (loword & 0xFFFFFFFFL);	argObjectArray[i] = VM_Reflection.wrapDouble(Double.longBitsToDouble(doubleBits));      } else if (argTypes[i].isLongType()) { 	hiword = VM_Magic.getMemoryWord(addr.add(4));	long longValue = (((long) hiword) << 32) | (loword & 0xFFFFFFFFL);	argObjectArray[i] = VM_Reflection.wrapLong(longValue);      } else if (argTypes[i].isBooleanType()) {	// the 0/1 bit is stored in the high byte		argObjectArray[i] = VM_Reflection.wrapBoolean(loword & 0x000000FF);      } else if (argTypes[i].isByteType()) {	// the target byte is stored in the high byte	argObjectArray[i] = VM_Reflection.wrapByte((byte) (loword & 0x000000FF));      } else if (argTypes[i].isCharType()) {	// char is stored in the high 2 bytes	argObjectArray[i] = VM_Reflection.wrapChar((char) (loword & 0x0000FFFF));      } else if (argTypes[i].isShortType()) {	// short is stored in the high 2 bytes	argObjectArray[i] = VM_Reflection.wrapShort((short) (loword & 0x0000FFFF));      } else if (argTypes[i].isReferenceType()) {	// for object, the arg is a JREF index, dereference to get the real object	argObjectArray[i] =  env.getJNIRef(loword);         } else if (argTypes[i].isIntType()) {	argObjectArray[i] = VM_Reflection.wrapInt(loword);      } else {	return null;      }    }    return argObjectArray;  }