# HG changeset patch # User Jaroslav Tulach # Date 1454176166 -3600 # Node ID 126d266b2da9dcb94bcd588e76621a8ae216daa5 # Parent 91a30c1a8c4b17a2693bd6d7b5223957d82c0450 Speeding up array access diff -r 91a30c1a8c4b -r 126d266b2da9 benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java --- a/benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java Sat Jan 30 18:33:49 2016 +0100 +++ b/benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java Sat Jan 30 18:49:26 2016 +0100 @@ -26,7 +26,7 @@ public JBox2dSimulationTest() { } - @Compare(slowdown = 40.0) + @Compare(slowdown = 30.0) public int tenThousand() throws IOException { Scene s = new Scene(); for (int i = 0; i < 10000; i++) { diff -r 91a30c1a8c4b -r 126d266b2da9 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Jan 30 18:33:49 2016 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Jan 30 18:49:26 2016 +0100 @@ -1231,26 +1231,26 @@ smapper.popI(), smapper.popI(), smapper.popA()); break; case opc_laload: - smapper.replace(this, VarType.LONG, "Array.at(@2, @1)", + smapper.replace(this, VarType.LONG, "(@2[@1] || Array.at(@2, @1))", smapper.popI(), smapper.getA(0)); break; case opc_faload: - smapper.replace(this, VarType.FLOAT, "Array.at(@2, @1)", + smapper.replace(this, VarType.FLOAT, "(@2[@1] || Array.at(@2, @1))", smapper.popI(), smapper.getA(0)); break; case opc_daload: - smapper.replace(this, VarType.DOUBLE, "Array.at(@2, @1)", + smapper.replace(this, VarType.DOUBLE, "(@2[@1] || Array.at(@2, @1))", smapper.popI(), smapper.getA(0)); break; case opc_aaload: - smapper.replace(this, VarType.REFERENCE, "Array.at(@2, @1)", + smapper.replace(this, VarType.REFERENCE, "(@2[@1] || Array.at(@2, @1))", smapper.popI(), smapper.getA(0)); break; case opc_iaload: case opc_baload: case opc_caload: case opc_saload: - smapper.replace(this, VarType.INTEGER, "Array.at(@2, @1)", + smapper.replace(this, VarType.INTEGER, "(@2[@1] || Array.at(@2, @1))", smapper.popI(), smapper.getA(0)); break; case opc_pop: