< prev index next >

src/share/vm/utilities/copy.cpp

Print this page
rev 12474 : 8171924: Use SIZE_FORMAT to print size_t values.


 197     }
 198   }
 199 
 200 
 201   /**
 202    * Copy and byte swap elements
 203    *
 204    * <D> - copy direction
 205    *
 206    * @param src address of source
 207    * @param dst address of destination
 208    * @param byte_count number of bytes to copy
 209    * @param elem_size size of the elements to copy-swap
 210    */
 211   template <CopyDirection D>
 212   static void do_conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {
 213     switch (elem_size) {
 214     case 2: do_conjoint_swap<uint16_t,D>(src, dst, byte_count); break;
 215     case 4: do_conjoint_swap<uint32_t,D>(src, dst, byte_count); break;
 216     case 8: do_conjoint_swap<uint64_t,D>(src, dst, byte_count); break;
 217     default: guarantee(false, "do_conjoint_swap: Invalid elem_size %zd\n", elem_size);
 218     }
 219   }
 220 };
 221 
 222 void Copy::conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {
 223   CopySwap::conjoint_swap(src, dst, byte_count, elem_size);
 224 }
 225 
 226 // Fill bytes; larger units are filled atomically if everything is aligned.
 227 void Copy::fill_to_memory_atomic(void* to, size_t size, jubyte value) {
 228   address dst = (address) to;
 229   uintptr_t bits = (uintptr_t) to | (uintptr_t) size;
 230   if (bits % sizeof(jlong) == 0) {
 231     jlong fill = (julong)( (jubyte)value ); // zero-extend
 232     if (fill != 0) {
 233       fill += fill << 8;
 234       fill += fill << 16;
 235       fill += fill << 32;
 236     }
 237     //Copy::fill_to_jlongs_atomic((jlong*) dst, size / sizeof(jlong));




 197     }
 198   }
 199 
 200 
 201   /**
 202    * Copy and byte swap elements
 203    *
 204    * <D> - copy direction
 205    *
 206    * @param src address of source
 207    * @param dst address of destination
 208    * @param byte_count number of bytes to copy
 209    * @param elem_size size of the elements to copy-swap
 210    */
 211   template <CopyDirection D>
 212   static void do_conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {
 213     switch (elem_size) {
 214     case 2: do_conjoint_swap<uint16_t,D>(src, dst, byte_count); break;
 215     case 4: do_conjoint_swap<uint32_t,D>(src, dst, byte_count); break;
 216     case 8: do_conjoint_swap<uint64_t,D>(src, dst, byte_count); break;
 217     default: guarantee(false, "do_conjoint_swap: Invalid elem_size " SIZE_FORMAT "\n", elem_size);
 218     }
 219   }
 220 };
 221 
 222 void Copy::conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {
 223   CopySwap::conjoint_swap(src, dst, byte_count, elem_size);
 224 }
 225 
 226 // Fill bytes; larger units are filled atomically if everything is aligned.
 227 void Copy::fill_to_memory_atomic(void* to, size_t size, jubyte value) {
 228   address dst = (address) to;
 229   uintptr_t bits = (uintptr_t) to | (uintptr_t) size;
 230   if (bits % sizeof(jlong) == 0) {
 231     jlong fill = (julong)( (jubyte)value ); // zero-extend
 232     if (fill != 0) {
 233       fill += fill << 8;
 234       fill += fill << 16;
 235       fill += fill << 32;
 236     }
 237     //Copy::fill_to_jlongs_atomic((jlong*) dst, size / sizeof(jlong));


< prev index next >