This commit is contained in:
lax1dude 2024-11-01 18:16:21 -07:00
parent 901a4a4c7d
commit acb4caa358

View File

@ -122,7 +122,7 @@ public final class LaxMalloc {
// at least one bucket exists containing a free chunk, // at least one bucket exists containing a free chunk,
// quickly determine which bucket it is with bit hacks // quickly determine which bucket it is with bit hacks
int availableBucket = numberOfTrailingZerosL(bucketMask); int availableBucket = Long.numberOfTrailingZeros(bucketMask);
Address bucketStartAddr = Address.fromInt(ADDR_HEAP_BUCKETS_START).add(availableBucket << SIZEOF_PTR_SH); Address bucketStartAddr = Address.fromInt(ADDR_HEAP_BUCKETS_START).add(availableBucket << SIZEOF_PTR_SH);
Address chunkPtr = bucketStartAddr.getAddress(); Address chunkPtr = bucketStartAddr.getAddress();
@ -147,7 +147,7 @@ public final class LaxMalloc {
if(bucketMask != 0l) { if(bucketMask != 0l) {
// there is a bucket with a larger chunk // there is a bucket with a larger chunk
int availableLargerBucket = numberOfTrailingZerosL(bucketMask); int availableLargerBucket = Long.numberOfTrailingZeros(bucketMask);
Address largerBucketStartAddr = Address.fromInt(ADDR_HEAP_BUCKETS_START).add(availableLargerBucket << SIZEOF_PTR_SH); Address largerBucketStartAddr = Address.fromInt(ADDR_HEAP_BUCKETS_START).add(availableLargerBucket << SIZEOF_PTR_SH);
Address largerChunkPtr = largerBucketStartAddr.getAddress(); Address largerChunkPtr = largerBucketStartAddr.getAddress();
int largerChunkSize = readChunkSizeStatus(largerChunkPtr); int largerChunkSize = readChunkSizeStatus(largerChunkPtr);
@ -468,7 +468,7 @@ public final class LaxMalloc {
if (allocSize < 128) if (allocSize < 128)
return (allocSize >> 3) - 1; return (allocSize >> 3) - 1;
int clz = numberOfLeadingZerosI(allocSize); int clz = Integer.numberOfLeadingZeros(allocSize);
int bucketIndex = (clz > 19) ? 110 - (clz << 2) + ((allocSize >> (29 - clz)) ^ 4) int bucketIndex = (clz > 19) ? 110 - (clz << 2) + ((allocSize >> (29 - clz)) ^ 4)
: min(71 - (clz << 1) + ((allocSize >> (30 - clz)) ^ 2), 63); : min(71 - (clz << 1) + ((allocSize >> (30 - clz)) ^ 2), 63);
@ -540,14 +540,4 @@ public final class LaxMalloc {
return a < b ? a : b; return a < b ? a : b;
} }
private static int numberOfTrailingZerosL(long i) {
// TODO: Intrinsify this, WASM has dedicated instructions for this operation!!!
return Long.numberOfTrailingZeros(i);
}
private static int numberOfLeadingZerosI(int i) {
// TODO: Intrinsify this, WASM has dedicated instructions for this operation!!!
return Integer.numberOfLeadingZeros(i);
}
} }