aboutsummaryrefslogtreecommitdiffhomepage
path: root/removed
diff options
context:
space:
mode:
authorAikar <[email protected]>2018-07-22 18:46:13 -0400
committerAikar <[email protected]>2018-07-22 18:46:13 -0400
commit4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a (patch)
treef343b25fcef686ac0d858dc91a9aa38536cc550f /removed
parent4b66f1978dfe8c180ae560e75d17518d932beee3 (diff)
downloadPaper-4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a.tar.gz
Paper-4dd6ddb86b9cc27e0cbd42d1f7baf6675914360a.zip
Re-add block inlining - Closes #1229
Also reordered MC Utils to be higher up
Diffstat (limited to 'removed')
-rw-r--r--removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch181
1 files changed, 0 insertions, 181 deletions
diff --git a/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch b/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch
deleted file mode 100644
index 82925800bb..0000000000
--- a/removed/server/0174-Speedup-BlockPos-by-fixing-inlining.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From 3492554953e265e90b7507d8085b7ee78ab418fc Mon Sep 17 00:00:00 2001
-From: Techcable <[email protected]>
-Date: Wed, 30 Nov 2016 20:56:58 -0600
-Subject: [PATCH] Speedup BlockPos by fixing inlining
-
-Normally the JVM can inline virtual getters by having two sets of code, one is the 'optimized' code and the other is the 'deoptimized' code.
-If a single type is used 99% of the time, then its worth it to inline, and to revert to 'deoptimized' the 1% of the time we encounter other types.
-But if two types are encountered commonly, then the JVM can't inline them both, and the call overhead remains.
-
-This scenario also occurs with BlockPos and MutableBlockPos.
-The variables in BlockPos are final, so MutableBlockPos can't modify them.
-MutableBlockPos fixes this by adding custom mutable variables, and overriding the getters to access them.
-
-This approach with utility methods that operate on MutableBlockPos and BlockPos.
-Specific examples are BlockPosition.up(), and World.isValidLocation().
-It makes these simple methods much slower than they need to be.
-
-This should result in an across the board speedup in anything that accesses blocks or does logic with positions.
-
-This is based upon conclusions drawn from inspecting the assenmbly generated bythe JIT compiler on my mircorbenchmarks.
-They had 'callq' (invoke) instead of 'mov' (get from memory) instructions.
-
-diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java
-index 679d5504e..8e737718e 100644
---- a/src/main/java/net/minecraft/server/BaseBlockPosition.java
-+++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java
-@@ -7,11 +7,12 @@ import javax.annotation.concurrent.Immutable;
- public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
-
- public static final BaseBlockPosition ZERO = new BaseBlockPosition(0, 0, 0);
-- private final int a;
-- private final int b;
-- private final int c;
-- // Paper start
-- public boolean isValidLocation() {
-+ // Paper start - Make mutable and protected for MutableBlockPos and PooledBlockPos
-+ protected int a;
-+ protected int b;
-+ protected int c;
-+
-+ public final boolean isValidLocation() {
- return a >= -30000000 && c >= -30000000 && a < 30000000 && c < 30000000 && b >= 0 && b < 256;
- }
- public boolean isInvalidYLocation() {
-@@ -49,17 +50,19 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
- return this.getY() == baseblockposition.getY() ? (this.getZ() == baseblockposition.getZ() ? this.getX() - baseblockposition.getX() : this.getZ() - baseblockposition.getZ()) : this.getY() - baseblockposition.getY();
- }
-
-- public int getX() {
-+ // Paper start - Only allow a single implementation
-+ public final int getX() {
- return this.a;
- }
-
-- public int getY() {
-+ public final int getY() {
- return this.b;
- }
-
-- public int getZ() {
-+ public final int getZ() {
- return this.c;
- }
-+ // Paper end
-
- public BaseBlockPosition d(BaseBlockPosition baseblockposition) {
- return new BaseBlockPosition(this.getY() * baseblockposition.getZ() - this.getZ() * baseblockposition.getY(), this.getZ() * baseblockposition.getX() - this.getX() * baseblockposition.getZ(), this.getX() * baseblockposition.getY() - this.getY() * baseblockposition.getX());
-diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
-index b3c1f550c..6a0b3a62d 100644
---- a/src/main/java/net/minecraft/server/BlockPosition.java
-+++ b/src/main/java/net/minecraft/server/BlockPosition.java
-@@ -211,19 +211,21 @@ public class BlockPosition extends BaseBlockPosition {
- if (this.b == null) {
- this.b = new BlockPosition.MutableBlockPosition(i, j, k);
- return this.b;
-- } else if (this.b.b == l && this.b.c == i1 && this.b.d == j1) {
-+ // Paper start - b, c, d, refer to x, y, z, and as such, a, b, c of BaseBlockPosition
-+ } else if (((BaseBlockPosition)this.b).a == l && ((BaseBlockPosition)this.b).b == i1 && ((BaseBlockPosition)this.b).c == j1) {
- return (BlockPosition.MutableBlockPosition) this.endOfData();
- } else {
-- if (this.b.b < l) {
-- ++this.b.b;
-- } else if (this.b.c < i1) {
-- this.b.b = i;
-- ++this.b.c;
-- } else if (this.b.d < j1) {
-- this.b.b = i;
-- this.b.c = j;
-- ++this.b.d;
-+ if (((BaseBlockPosition) this.b).a < l) {
-+ ++((BaseBlockPosition) this.b).a;
-+ } else if (((BaseBlockPosition) this.b).b < i1) {
-+ ((BaseBlockPosition) this.b).a = i;
-+ ++((BaseBlockPosition) this.b).b;
-+ } else if (((BaseBlockPosition) this.b).c < j1) {
-+ ((BaseBlockPosition) this.b).a = i;
-+ ((BaseBlockPosition) this.b).b = j;
-+ ++((BaseBlockPosition) this.b).c;
- }
-+ // Paper end
-
- return this.b;
- }
-@@ -338,6 +340,8 @@ public class BlockPosition extends BaseBlockPosition {
-
- public static class MutableBlockPosition extends BlockPosition {
-
-+ // Paper start - Remove variables
-+ /*
- protected int b;
- protected int c;
- protected int d;
-@@ -350,6 +354,7 @@ public class BlockPosition extends BaseBlockPosition {
- public boolean isInvalidYLocation() {
- return c < 0 || c >= 256;
- }
-+ */
- // Paper end
-
- public MutableBlockPosition() {
-@@ -362,9 +367,11 @@ public class BlockPosition extends BaseBlockPosition {
-
- public MutableBlockPosition(int i, int j, int k) {
- super(0, 0, 0);
-- this.b = i;
-- this.c = j;
-- this.d = k;
-+ // Paper start - Modify base position variables
-+ ((BaseBlockPosition) this).a = i;
-+ ((BaseBlockPosition) this).b = j;
-+ ((BaseBlockPosition) this).c = k;
-+ // Paper end
- }
-
- public BlockPosition a(double d0, double d1, double d2) {
-@@ -383,6 +390,8 @@ public class BlockPosition extends BaseBlockPosition {
- return super.a(enumblockrotation).h();
- }
-
-+ // Paper start - Use superclass methods
-+ /*
- public int getX() {
- return this.b;
- }
-@@ -394,12 +403,16 @@ public class BlockPosition extends BaseBlockPosition {
- public int getZ() {
- return this.d;
- }
-+ */
-+ // Paper end
-
- public void setValues(int x, int y, int z) { c(x, y, z); } // Paper - OBFHELPER
- public BlockPosition.MutableBlockPosition c(int i, int j, int k) {
-- this.b = i;
-- this.c = j;
-- this.d = k;
-+ // Paper start - Modify base position variables
-+ ((BaseBlockPosition) this).a = i;
-+ ((BaseBlockPosition) this).b = j;
-+ ((BaseBlockPosition) this).c = k;
-+ // Paper end
- return this;
- }
-
-@@ -416,11 +429,11 @@ public class BlockPosition extends BaseBlockPosition {
- }
-
- public BlockPosition.MutableBlockPosition c(EnumDirection enumdirection, int i) {
-- return this.c(this.b + enumdirection.getAdjacentX() * i, this.c + enumdirection.getAdjacentY() * i, this.d + enumdirection.getAdjacentZ() * i);
-+ return this.c(this.getX() + enumdirection.getAdjacentX() * i, this.getY() + enumdirection.getAdjacentY() * i, this.getZ() + enumdirection.getAdjacentZ() * i); // Paper - USE THE BLEEPING GETTERS
- }
-
- public void p(int i) {
-- this.c = i;
-+ ((BaseBlockPosition) this).b = i; // Paper - Modify base variable
- }
-
- public BlockPosition h() {
---
-2.18.0
-