rtn.store(value, Offset.fromInt(offset));
rtn.store(value, Offset.fromIntSignExtend(offset));
  public final Address getBytes (String str)     throws LogicallyUninterruptiblePragma {    if (VM_SysCall.WITH_GCSPY) {      if (str == null)         return Address.zero();        if (DEBUG_) {        Log.write("getBytes: "); Log.write(str); Log.write("->");      }        // Grab some memory sufficient to hold the null terminated string,      // rounded up to an integral number of ints.      int len;      swLock();         len = str.length();       swUnlock();      int size = ((len >>> LOG_BYTES_IN_WORD) + 1) << LOG_BYTES_IN_WORD;      Address rtn = malloc(size);           // Write the string into it, one word at a time, being carefull about endianism      for (int w = 0; w <= (len >>> LOG_BYTES_IN_WORD); w++)  {        int value = 0;        int offset = w << LOG_BYTES_IN_WORD;        int shift = 0;        for (int b = 0; b < BYTES_IN_WORD; b++) {          byte byteVal = 0;          if (offset + b < len) {            swLock();               byteVal = (byte) str.charAt(offset + b);    // dodgy conversion!            swUnlock();          }          // Endianism matters          //-#if RVM_FOR_IA32          value = (byteVal << shift) | value;          //-#else          value = (value << shift) | byteVal; // not tested          //-#endif          shift += BITS_IN_BYTE;        }        rtn.store(value, Offset.fromInt(offset));      }      if (DEBUG_) {        VM_SysCall.sysWriteBytes(2/*SysTraceFd*/, rtn, size); Log.write("\n");      }      return rtn;    }    else       return Address.zero();  }