mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
adadf16548
I'm not sure it was really helping, and now suspecting it might be causing issues Movement sucks
220 lines
10 KiB
Diff
220 lines
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 0d3a57900dc0bf5bc9729a3661a32da4e7ea1f33..a2ee39b7efca0851bca8dc0ec1c13fe3cada6b3f 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
@@ -24,14 +24,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);
|
|
@@ -53,28 +55,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() {
|
|
@@ -83,12 +86,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 6a8597c585e74ebea2e8bac2f9965f8760e19b67..7806f3c351cba3f0388da11888f900c48004dadf 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);
|
|
+ return (short) ((blockposition.getX() & 15) << 8 | (blockposition.getZ() & 15) << 4 | blockposition.getY() & 15); // Paper - simplify/inline
|
|
}
|
|
|
|
public static int c(int i) {
|
|
@@ -83,16 +87,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() {
|
|
@@ -107,8 +111,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) {
|
|
@@ -129,17 +135,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() {
|
|
@@ -147,18 +154,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) {
|