geforkt von Mirrors/Paper
e886d8118e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing
221 Zeilen
10 KiB
Diff
221 Zeilen
10 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 52ae74571b0d671a294900caedaa400b62d4ea34..2d887af902a33b0e28d8f0a6ac2e59c815a7856e 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
@@ -25,14 +25,16 @@ public class BlockPosition extends BaseBlockPosition {
|
|
}).stable();
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
|
public static final BlockPosition ZERO = new BlockPosition(0, 0, 0);
|
|
- private static final int f = 1 + MathHelper.f(MathHelper.c(30000000));
|
|
- private static final int g = BlockPosition.f;
|
|
- private static final int h = 64 - BlockPosition.f - BlockPosition.g;
|
|
- private static final long i = (1L << BlockPosition.f) - 1L;
|
|
- private static final long j = (1L << BlockPosition.h) - 1L;
|
|
- private static final long k = (1L << BlockPosition.g) - 1L;
|
|
- private static final int l = BlockPosition.h;
|
|
- private static final int m = BlockPosition.h + BlockPosition.g;
|
|
+ // Paper start - static constants
|
|
+ private static final int f = 26;
|
|
+ private static final int g = 26;
|
|
+ private static final int h = 12;
|
|
+ private static final long i = 67108863;
|
|
+ private static final long j = 4095;
|
|
+ private static final long k = 67108863;
|
|
+ private static final int l = 12;
|
|
+ private static final int m = 38;
|
|
+ // Paper end
|
|
|
|
public BlockPosition(int i, int j, int k) {
|
|
super(i, j, k);
|
|
@@ -54,28 +56,29 @@ public class BlockPosition extends BaseBlockPosition {
|
|
this(baseblockposition.getX(), baseblockposition.getY(), baseblockposition.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.m - BlockPosition.f >> 64 - BlockPosition.f);
|
|
+ return (int) (i >> 38); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(long i) {
|
|
- return (int) (i << 64 - BlockPosition.h >> 64 - BlockPosition.h);
|
|
+ return (int) ((i << 52) >> 52); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int d(long i) {
|
|
- return (int) (i << 64 - BlockPosition.l - BlockPosition.g >> 64 - BlockPosition.g);
|
|
+ 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 long asLong() {
|
|
@@ -84,12 +87,7 @@ public class BlockPosition extends BaseBlockPosition {
|
|
|
|
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.i) << BlockPosition.m;
|
|
- l |= ((long) j & BlockPosition.j) << 0;
|
|
- l |= ((long) k & BlockPosition.k) << BlockPosition.l;
|
|
- 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 8d325ec19c5d954785732d8e295b4ba150f740ca..f95925f1c5d091f1a129d0437bb6e175c6ac080f 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,15 +28,23 @@ 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) {
|
|
return a(i, enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static long getAdjacentFromBlockPos(int x, int y, int z, EnumDirection enumdirection) {
|
|
+ return (((long) ((x >> 4) + enumdirection.getAdjacentX()) & 4194303L) << 42) | (((long) ((y >> 4) + enumdirection.getAdjacentY()) & 1048575L)) | (((long) ((z >> 4) + enumdirection.getAdjacentZ()) & 4194303L) << 20);
|
|
+ }
|
|
+ public static long getAdjacentFromSectionPos(int x, int y, int z, EnumDirection enumdirection) {
|
|
+ return (((long) (x + enumdirection.getAdjacentX()) & 4194303L) << 42) | (((long) ((y) + enumdirection.getAdjacentY()) & 1048575L)) | (((long) (z + enumdirection.getAdjacentZ()) & 4194303L) << 20);
|
|
+ }
|
|
+ // Paper end
|
|
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 +56,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 << 0);
|
|
+ return (short) ((blockposition.getX() & 15) << 8 | (blockposition.getZ() & 15) << 4 | blockposition.getY() & 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int a(short short0) {
|
|
@@ -111,16 +115,16 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return this.getZ();
|
|
}
|
|
|
|
- public int d() {
|
|
- return this.a() << 4;
|
|
+ public final int d() { // Paper
|
|
+ return this.getX() << 4; // Paper
|
|
}
|
|
|
|
- public int e() {
|
|
- return this.b() << 4;
|
|
+ public final int e() { // Paper
|
|
+ return this.getY() << 4; // Paper
|
|
}
|
|
|
|
- public int f() {
|
|
- return this.c() << 4;
|
|
+ public final int f() { // Paper
|
|
+ return this.getZ() << 4; // Paper
|
|
}
|
|
|
|
public int g() {
|
|
@@ -135,8 +139,10 @@ public class SectionPosition extends BaseBlockPosition {
|
|
return (this.c() << 4) + 15;
|
|
}
|
|
|
|
+ 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) {
|
|
@@ -157,17 +163,18 @@ 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 s() {
|
|
- return b(this.a(), this.b(), this.c());
|
|
+ return (((long) getX() & 4194303L) << 42) | (((long) getY() & 1048575L)) | (((long) getZ() & 4194303L) << 20); // Paper - Simplify to reduce instruction count
|
|
}
|
|
|
|
public Stream<BlockPosition> t() {
|
|
@@ -175,18 +182,11 @@ public class SectionPosition extends BaseBlockPosition {
|
|
}
|
|
|
|
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.getX() - i, sectionposition.getY() - i, sectionposition.getZ() - i, sectionposition.getX() + i, sectionposition.getY() + i, sectionposition.getZ() + 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) {
|