Speeding up array access
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 30 Jan 2016 18:49:26 +0100
changeset 1878126d266b2da9
parent 1877 91a30c1a8c4b
child 1879 d81b15eb890b
Speeding up array access
benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java	Sat Jan 30 18:33:49 2016 +0100
     1.2 +++ b/benchmarks/jbox2d/src/test/java/org/apidesign/benchmark/jbox2d/JBox2dSimulationTest.java	Sat Jan 30 18:49:26 2016 +0100
     1.3 @@ -26,7 +26,7 @@
     1.4      public JBox2dSimulationTest() {
     1.5      }
     1.6  
     1.7 -    @Compare(slowdown = 40.0)
     1.8 +    @Compare(slowdown = 30.0)
     1.9      public int tenThousand() throws IOException {
    1.10          Scene s = new Scene();
    1.11          for (int i = 0; i < 10000; i++) {
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Jan 30 18:33:49 2016 +0100
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Jan 30 18:49:26 2016 +0100
     2.3 @@ -1231,26 +1231,26 @@
     2.4                           smapper.popI(), smapper.popI(), smapper.popA());
     2.5                      break;
     2.6                  case opc_laload:
     2.7 -                    smapper.replace(this, VarType.LONG, "Array.at(@2, @1)",
     2.8 +                    smapper.replace(this, VarType.LONG, "(@2[@1] || Array.at(@2, @1))",
     2.9                           smapper.popI(), smapper.getA(0));
    2.10                      break;
    2.11                  case opc_faload:
    2.12 -                    smapper.replace(this, VarType.FLOAT, "Array.at(@2, @1)",
    2.13 +                    smapper.replace(this, VarType.FLOAT, "(@2[@1] || Array.at(@2, @1))",
    2.14                           smapper.popI(), smapper.getA(0));
    2.15                      break;
    2.16                  case opc_daload:
    2.17 -                    smapper.replace(this, VarType.DOUBLE, "Array.at(@2, @1)",
    2.18 +                    smapper.replace(this, VarType.DOUBLE, "(@2[@1] || Array.at(@2, @1))",
    2.19                           smapper.popI(), smapper.getA(0));
    2.20                      break;
    2.21                  case opc_aaload:
    2.22 -                    smapper.replace(this, VarType.REFERENCE, "Array.at(@2, @1)",
    2.23 +                    smapper.replace(this, VarType.REFERENCE, "(@2[@1] || Array.at(@2, @1))",
    2.24                           smapper.popI(), smapper.getA(0));
    2.25                      break;
    2.26                  case opc_iaload:
    2.27                  case opc_baload:
    2.28                  case opc_caload:
    2.29                  case opc_saload:
    2.30 -                    smapper.replace(this, VarType.INTEGER, "Array.at(@2, @1)",
    2.31 +                    smapper.replace(this, VarType.INTEGER, "(@2[@1] || Array.at(@2, @1))",
    2.32                           smapper.popI(), smapper.getA(0));
    2.33                      break;
    2.34                  case opc_pop: