comparison src/share/vm/memory/threadLocalAllocBuffer.hpp @ 1367:9e321dcfa5b7

6940726: Use BIS instruction for allocation prefetch on Sparc Summary: Use BIS instruction for allocation prefetch on Sparc Reviewed-by: twisti
author kvn
date Wed, 07 Apr 2010 12:39:27 -0700
parents a61af66fc99e
children c18cbe5936b8
comparison
equal deleted inserted replaced
1366:b9d85fcdf743 1367:9e321dcfa5b7
109 // Don't discard tlab if remaining space is larger than this. 109 // Don't discard tlab if remaining space is larger than this.
110 size_t refill_waste_limit() const { return _refill_waste_limit; } 110 size_t refill_waste_limit() const { return _refill_waste_limit; }
111 111
112 // Allocate size HeapWords. The memory is NOT initialized to zero. 112 // Allocate size HeapWords. The memory is NOT initialized to zero.
113 inline HeapWord* allocate(size_t size); 113 inline HeapWord* allocate(size_t size);
114 static size_t alignment_reserve() { return align_object_size(typeArrayOopDesc::header_size(T_INT)); } 114
115 // Reserve space at the end of TLAB
116 static size_t end_reserve() {
117 int reserve_size = typeArrayOopDesc::header_size(T_INT);
118 if (AllocatePrefetchStyle == 3) {
119 // BIS is used to prefetch - we need a space for it.
120 // +1 for rounding up to next cache line +1 to be safe
121 int lines = AllocatePrefetchLines + 2;
122 int step_size = AllocatePrefetchStepSize;
123 int distance = AllocatePrefetchDistance;
124 int prefetch_end = (distance + step_size*lines)/(int)HeapWordSize;
125 reserve_size = MAX2(reserve_size, prefetch_end);
126 }
127 return reserve_size;
128 }
129 static size_t alignment_reserve() { return align_object_size(end_reserve()); }
115 static size_t alignment_reserve_in_bytes() { return alignment_reserve() * HeapWordSize; } 130 static size_t alignment_reserve_in_bytes() { return alignment_reserve() * HeapWordSize; }
116 131
117 // Return tlab size or remaining space in eden such that the 132 // Return tlab size or remaining space in eden such that the
118 // space is large enough to hold obj_size and necessary fill space. 133 // space is large enough to hold obj_size and necessary fill space.
119 // Otherwise return 0; 134 // Otherwise return 0;