src/share/vm/utilities/copy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/utilities

src/share/vm/utilities/copy.cpp

Print this page




  47     Copy::conjoint_jints_atomic((jint*) src, (jint*) dst, size / sizeof(jint));
  48   } else if (bits % sizeof(jshort) == 0) {
  49     Copy::conjoint_jshorts_atomic((jshort*) src, (jshort*) dst, size / sizeof(jshort));
  50   } else {
  51     // Not aligned, so no need to be atomic.
  52     Copy::conjoint_jbytes((void*) src, (void*) dst, size);
  53   }
  54 }
  55 
  56 class CopySwap : AllStatic {
  57 public:
  58   /**
  59    * Copy and byte swap elements
  60    *
  61    * @param src address of source
  62    * @param dst address of destination
  63    * @param byte_count number of bytes to copy
  64    * @param elem_size size of the elements to copy-swap
  65    */
  66   static void conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {







  67     address src_end = src + byte_count;
  68 
  69     if (dst <= src || dst >= src_end) {
  70       do_conjoint_swap<RIGHT>(src, dst, byte_count, elem_size);
  71     } else {
  72       do_conjoint_swap<LEFT>(src, dst, byte_count, elem_size);
  73     }
  74   }
  75 
  76 private:
  77   /**
  78    * Byte swap a 16-bit value
  79    */
  80   static uint16_t byte_swap(uint16_t x) {
  81     return (x << 8) | (x >> 8);
  82   }
  83 
  84   /**
  85    * Byte swap a 32-bit value
  86    */




  47     Copy::conjoint_jints_atomic((jint*) src, (jint*) dst, size / sizeof(jint));
  48   } else if (bits % sizeof(jshort) == 0) {
  49     Copy::conjoint_jshorts_atomic((jshort*) src, (jshort*) dst, size / sizeof(jshort));
  50   } else {
  51     // Not aligned, so no need to be atomic.
  52     Copy::conjoint_jbytes((void*) src, (void*) dst, size);
  53   }
  54 }
  55 
  56 class CopySwap : AllStatic {
  57 public:
  58   /**
  59    * Copy and byte swap elements
  60    *
  61    * @param src address of source
  62    * @param dst address of destination
  63    * @param byte_count number of bytes to copy
  64    * @param elem_size size of the elements to copy-swap
  65    */
  66   static void conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size) {
  67     assert(src != NULL, "address must not be NULL");
  68     assert(dst != NULL, "address must not be NULL");
  69     assert(elem_size == 2 || elem_size == 4 || elem_size == 8,
  70            "incorrect element size: " SIZE_FORMAT, elem_size);
  71     assert(is_size_aligned(byte_count, elem_size),
  72            "byte_count " SIZE_FORMAT " must be multiple of element size " SIZE_FORMAT, byte_count, elem_size);
  73 
  74     address src_end = src + byte_count;
  75 
  76     if (dst <= src || dst >= src_end) {
  77       do_conjoint_swap<RIGHT>(src, dst, byte_count, elem_size);
  78     } else {
  79       do_conjoint_swap<LEFT>(src, dst, byte_count, elem_size);
  80     }
  81   }
  82 
  83 private:
  84   /**
  85    * Byte swap a 16-bit value
  86    */
  87   static uint16_t byte_swap(uint16_t x) {
  88     return (x << 8) | (x >> 8);
  89   }
  90 
  91   /**
  92    * Byte swap a 32-bit value
  93    */


src/share/vm/utilities/copy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File