Mercurial > hg > graal-compiler
comparison src/share/vm/utilities/copy.hpp @ 1579:e9ff18c4ace7
Merge
author | jrose |
---|---|
date | Wed, 02 Jun 2010 22:45:42 -0700 |
parents | c18cbe5936b8 2d127394260e |
children | d93949c5bdcc |
comparison
equal
deleted
inserted
replaced
1562:dfe27f03244a | 1579:e9ff18c4ace7 |
---|---|
49 } | 49 } |
50 | 50 |
51 class Copy : AllStatic { | 51 class Copy : AllStatic { |
52 public: | 52 public: |
53 // Block copy methods have four attributes. We don't define all possibilities. | 53 // Block copy methods have four attributes. We don't define all possibilities. |
54 // alignment: aligned according to minimum Java object alignment (MinObjAlignment) | 54 // alignment: aligned to BytesPerLong |
55 // arrayof: arraycopy operation with both operands aligned on the same | 55 // arrayof: arraycopy operation with both operands aligned on the same |
56 // boundary as the first element of an array of the copy unit. | 56 // boundary as the first element of an array of the copy unit. |
57 // This is currently a HeapWord boundary on all platforms, except | 57 // This is currently a HeapWord boundary on all platforms, except |
58 // for long and double arrays, which are aligned on an 8-byte | 58 // for long and double arrays, which are aligned on an 8-byte |
59 // boundary on all platforms. | 59 // boundary on all platforms. |
68 // ('conjoint_' | 'disjoint_') | 68 // ('conjoint_' | 'disjoint_') |
69 // ('words' | 'bytes' | 'jshorts' | 'jints' | 'jlongs' | 'oops') | 69 // ('words' | 'bytes' | 'jshorts' | 'jints' | 'jlongs' | 'oops') |
70 // [ '_atomic' ] | 70 // [ '_atomic' ] |
71 // | 71 // |
72 // Except in the arrayof case, whatever the alignment is, we assume we can copy | 72 // Except in the arrayof case, whatever the alignment is, we assume we can copy |
73 // whole alignment units. E.g., if MinObjAlignment is 2x word alignment, an odd | 73 // whole alignment units. E.g., if BytesPerLong is 2x word alignment, an odd |
74 // count may copy an extra word. In the arrayof case, we are allowed to copy | 74 // count may copy an extra word. In the arrayof case, we are allowed to copy |
75 // only the number of copy units specified. | 75 // only the number of copy units specified. |
76 | 76 |
77 // HeapWords | 77 // HeapWords |
78 | 78 |
303 basic_fatal("not word aligned"); | 303 basic_fatal("not word aligned"); |
304 #endif | 304 #endif |
305 } | 305 } |
306 static void assert_params_aligned(HeapWord* from, HeapWord* to) { | 306 static void assert_params_aligned(HeapWord* from, HeapWord* to) { |
307 #ifdef ASSERT | 307 #ifdef ASSERT |
308 if (mask_bits((uintptr_t)from, MinObjAlignmentInBytes-1) != 0) | 308 if (mask_bits((uintptr_t)from, BytesPerLong-1) != 0) |
309 basic_fatal("not object aligned"); | 309 basic_fatal("not long aligned"); |
310 if (mask_bits((uintptr_t)to, MinObjAlignmentInBytes-1) != 0) | 310 if (mask_bits((uintptr_t)to, BytesPerLong-1) != 0) |
311 basic_fatal("not object aligned"); | 311 basic_fatal("not long aligned"); |
312 #endif | 312 #endif |
313 } | 313 } |
314 | 314 |
315 static void assert_params_aligned(HeapWord* to) { | 315 static void assert_params_aligned(HeapWord* to) { |
316 #ifdef ASSERT | 316 #ifdef ASSERT |
317 if (mask_bits((uintptr_t)to, MinObjAlignmentInBytes-1) != 0) | 317 if (mask_bits((uintptr_t)to, BytesPerLong-1) != 0) |
318 basic_fatal("not object aligned"); | 318 basic_fatal("not long aligned"); |
319 #endif | 319 #endif |
320 } | 320 } |
321 | 321 |
322 static void assert_non_zero(size_t count) { | 322 static void assert_non_zero(size_t count) { |
323 #ifdef ASSERT | 323 #ifdef ASSERT |