mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-23 09:27:45 +01:00
f0409edcd7
Upon further knowledge of the system, it is known that region files are closing properly, as well as this didn't help native memory use anyways. This patch also caused issues compiling on a newer JDK being able to release the jar to java 8 users.
235 lines
9.6 KiB
Diff
235 lines
9.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 4 Jun 2020 02:24:49 -0400
|
|
Subject: [PATCH] Optimize Bit Operations by inlining
|
|
|
|
Inline bit operations and reduce instruction count to make these hot
|
|
operations faster
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
index 3bf17ccdaef21322b787db538d569e0bc614ef22..4c64798fbc50f4d8b08502ba865c5fde5c968e62 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
@@ -75,38 +75,34 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
|
|
return dynamicops.createIntList(IntStream.of(new int[]{this.getX(), this.getY(), this.getZ()}));
|
|
}
|
|
|
|
+ public static long getAdjacent(int baseX, int baseY, int baseZ, EnumDirection enumdirection) { return asLong(baseX + enumdirection.getAdjacentX(), baseY + enumdirection.getAdjacentY(), baseZ + enumdirection.getAdjacentZ()); } // Paper
|
|
public static long a(long i, EnumDirection enumdirection) {
|
|
return a(i, enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ());
|
|
}
|
|
|
|
public static long a(long i, int j, int k, int l) {
|
|
- return a(b(i) + j, c(i) + k, d(i) + l);
|
|
+ return a((int) (i >> 38) + j, (int) ((i << 52) >> 52) + k, (int) ((i << 26) >> 38) + l); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int b(long i) {
|
|
- return (int) (i << 64 - BlockPosition.k - BlockPosition.c >> 64 - BlockPosition.c);
|
|
+ return (int) (i >> 38); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(long i) {
|
|
- return (int) (i << 64 - BlockPosition.f >> 64 - BlockPosition.f);
|
|
+ return (int) ((i << 52) >> 52); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int d(long i) {
|
|
- return (int) (i << 64 - BlockPosition.j - BlockPosition.d >> 64 - BlockPosition.d);
|
|
+ return (int) ((i << 26) >> 38); // Paper - simplify/inline
|
|
}
|
|
|
|
public static BlockPosition fromLong(long i) {
|
|
- return new BlockPosition(b(i), c(i), d(i));
|
|
+ return new BlockPosition((int) (i >> 38), (int) ((i << 52) >> 52), (int) ((i << 26) >> 38)); // Paper - simplify/inline
|
|
}
|
|
|
|
public static long asLong(int x, int y, int z) { return a(x, y, z); } // Paper - OBFHELPER
|
|
public static long a(int i, int j, int k) {
|
|
- long l = 0L;
|
|
-
|
|
- l |= ((long) i & BlockPosition.g) << BlockPosition.k;
|
|
- l |= ((long) j & BlockPosition.h) << 0;
|
|
- l |= ((long) k & BlockPosition.i) << BlockPosition.j;
|
|
- return l;
|
|
+ return (((long) i & (long) 67108863) << 38) | (((long) j & (long) 4095)) | (((long) k & (long) 67108863) << 12); // Paper - inline constants and simplify
|
|
}
|
|
|
|
public static long f(long i) {
|
|
diff --git a/src/main/java/net/minecraft/server/SectionPosition.java b/src/main/java/net/minecraft/server/SectionPosition.java
|
|
index ca3f63f5e5e4e926de562b4bfbbf72ad8a6b943f..c415736282de6d4d0f87135c24999c4bbf993901 100644
|
|
--- a/src/main/java/net/minecraft/server/SectionPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/SectionPosition.java
|
|
@@ -16,7 +16,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static SectionPosition a(BlockPosition blockposition) {
|
|
- return new SectionPosition(a(blockposition.getX()), a(blockposition.getY()), a(blockposition.getZ()));
|
|
+ return new SectionPosition(blockposition.getX() >> 4, blockposition.getY() >> 4, blockposition.getZ() >> 4); // Paper
|
|
}
|
|
|
|
public static SectionPosition a(ChunkCoordIntPair chunkcoordintpair, int i) {
|
|
@@ -28,7 +28,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static SectionPosition a(long i) {
|
|
- return new SectionPosition(b(i), c(i), d(i));
|
|
+ return new SectionPosition((int) (i >> 42), (int) (i << 44 >> 44), (int) (i << 22 >> 42)); // Paper
|
|
}
|
|
|
|
public static long a(long i, EnumDirection enumdirection) {
|
|
@@ -36,7 +36,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static long a(long i, int j, int k, int l) {
|
|
- return b(b(i) + j, c(i) + k, d(i) + l);
|
|
+ return (((long) ((int) (i >> 42) + j) & 4194303L) << 42) | (((long) ((int) (i << 44 >> 44) + k) & 1048575L)) | (((long) ((int) (i << 22 >> 42) + l) & 4194303L) << 20); // Simplify to reduce instruction count
|
|
}
|
|
|
|
public static int a(int i) {
|
|
@@ -48,11 +48,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static short b(BlockPosition blockposition) {
|
|
- int i = b(blockposition.getX());
|
|
- int j = b(blockposition.getY());
|
|
- int k = b(blockposition.getZ());
|
|
-
|
|
- return (short) (i << 8 | k << 4 | j);
|
|
+ return (short) ((blockposition.x & 15) << 8 | (blockposition.z & 15) << 4 | blockposition.y & 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(int i) {
|
|
@@ -60,7 +56,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public static int b(long i) {
|
|
- return (int) (i << 0 >> 42);
|
|
+ return (int) (i >> 42); // Paper
|
|
}
|
|
|
|
public static int c(long i) {
|
|
@@ -71,44 +67,46 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return (int) (i << 22 >> 42);
|
|
}
|
|
|
|
- public int a() {
|
|
- return this.getX();
|
|
+ public final int a() { // Paper
|
|
+ return x; // Paper
|
|
}
|
|
|
|
- public int b() {
|
|
- return this.getY();
|
|
+ public final int b() { // Paper
|
|
+ return y; // Paper
|
|
}
|
|
|
|
- public int c() {
|
|
- return this.getZ();
|
|
+ public final int c() { // Paper
|
|
+ return z; // Paper
|
|
}
|
|
|
|
- public int d() {
|
|
- return this.a() << 4;
|
|
+ public final int d() { // Paper
|
|
+ return x << 4; // Paper
|
|
}
|
|
|
|
- public int e() {
|
|
- return this.b() << 4;
|
|
+ public final int e() { // Paper
|
|
+ return y << 4; // Paper
|
|
}
|
|
|
|
- public int f() {
|
|
- return this.c() << 4;
|
|
+ public final int f() { // Paper
|
|
+ return z << 4; // Paper
|
|
}
|
|
|
|
- public int g() {
|
|
- return (this.a() << 4) + 15;
|
|
+ public final int g() { // Paper
|
|
+ return (x << 4) + 15; // Paper
|
|
}
|
|
|
|
- public int h() {
|
|
- return (this.b() << 4) + 15;
|
|
+ public final int h() { // Paper
|
|
+ return (y << 4) + 15; // Paper
|
|
}
|
|
|
|
- public int r() {
|
|
- return (this.c() << 4) + 15;
|
|
+ public final int r() { // Paper
|
|
+ return (z << 4) + 15; // Paper
|
|
}
|
|
|
|
+ public static long blockToSection(long i) { return e(i); } // Paper - OBFHELPER
|
|
public static long e(long i) {
|
|
- return b(a(BlockPosition.b(i)), a(BlockPosition.c(i)), a(BlockPosition.d(i)));
|
|
+ // b(a(BlockPosition.b(i)), a(BlockPosition.c(i)), a(BlockPosition.d(i)));
|
|
+ return (((long) (int) (i >> 42) & 4194303L) << 42) | (((long) (int) ((i << 52) >> 56) & 1048575L)) | (((long) (int) ((i << 26) >> 42) & 4194303L) << 20); // Simplify to reduce instruction count
|
|
}
|
|
|
|
public static long f(long i) {
|
|
@@ -116,7 +114,7 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
public BlockPosition s() {
|
|
- return new BlockPosition(c(this.a()), c(this.b()), c(this.c()));
|
|
+ return new BlockPosition(x << 4, y << 4, z << 4); // Paper
|
|
}
|
|
|
|
public BlockPosition t() {
|
|
@@ -129,36 +127,30 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return new ChunkCoordIntPair(this.a(), this.c());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static long blockPosAsSectionLong(int i, int j, int k) {
|
|
+ return (((long) (i >> 4) & 4194303L) << 42) | (((long) (j >> 4) & 1048575L)) | (((long) (k >> 4) & 4194303L) << 20);
|
|
+ }
|
|
+ // Paper end
|
|
+ public static long asLong(int i, int j, int k) { return b(i, j, k); } // Paper - OBFHELPER
|
|
public static long b(int i, int j, int k) {
|
|
- long l = 0L;
|
|
-
|
|
- l |= ((long) i & 4194303L) << 42;
|
|
- l |= ((long) j & 1048575L) << 0;
|
|
- l |= ((long) k & 4194303L) << 20;
|
|
- return l;
|
|
+ return (((long) i & 4194303L) << 42) | (((long) j & 1048575L)) | (((long) k & 4194303L) << 20); // Paper - Simplify to reduce instruction count
|
|
}
|
|
|
|
public long v() {
|
|
- return b(this.a(), this.b(), this.c());
|
|
+ return (((long) x & 4194303L) << 42) | (((long) y & 1048575L)) | (((long) z & 4194303L) << 20); // Paper - Simplify to reduce instruction count
|
|
}
|
|
|
|
public Stream<BlockPosition> w() {
|
|
- return BlockPosition.a(this.d(), this.e(), this.f(), this.g(), this.h(), this.r());
|
|
+ return BlockPosition.a(x << 4, y << 4, z << 4, (x << 4) + 15, (y << 4) + 15, (z << 4) + 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> a(SectionPosition sectionposition, int i) {
|
|
- int j = sectionposition.a();
|
|
- int k = sectionposition.b();
|
|
- int l = sectionposition.c();
|
|
-
|
|
- return a(j - i, k - i, l - i, j + i, k + i, l + i);
|
|
+ return a(sectionposition.x - i, sectionposition.y - i, sectionposition.z - i, sectionposition.x + i, sectionposition.y + i, sectionposition.z + i); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> b(ChunkCoordIntPair chunkcoordintpair, int i) {
|
|
- int j = chunkcoordintpair.x;
|
|
- int k = chunkcoordintpair.z;
|
|
-
|
|
- return a(j - i, 0, k - i, j + i, 15, k + i);
|
|
+ return a(chunkcoordintpair.x - i, 0, chunkcoordintpair.z - i, chunkcoordintpair.x + i, 15, chunkcoordintpair.z + i); // Paper - simplify/inline
|
|
}
|
|
|
|
public static Stream<SectionPosition> a(final int i, final int j, final int k, final int l, final int i1, final int j1) {
|