1. 11 Jun, 2018 1 commit
    • Jason Zaugg's avatar
      Call interpreter.copyOperation consistently · f77c2bc1
      Jason Zaugg authored
      Before this change, `Frame.execute` did not invoke the interpreter's
      `copyOperation` method for all values that are pushed on the frame's
      when executing some copying instructions.
      
      For example, in the case of `SWAP`, `copyOperation` is invoked:
      
          value2 = pop();
          value1 = pop();
          push(interpreter.copyOperation(insn, value2));
          push(interpreter.copyOperation(insn, value1));
      
      For `DUP` on the other hand, the original value is pushed onto the
      stack without notifying the interpreter:
      
          value1 = pop();
          push(value1);
          push(interpreter.copyOperation(insn, value1));
      
      This leads to a problem for the `SourceInterpreter`, which collects
      for every value a set of potential producer instructions. Given the
      bytecode sequence
      
          NEW java/lang/Object
          DUP
          INVOKESPECIAL java/lang/Object.<init> ()V
      
      In the frame of the `INVOKESPECIAL` instruction, the value on the stack
      lists as its producer the `NEW` operation instead of the `DUP`, which
      not expected.
      f77c2bc1
  2. 24 May, 2018 1 commit
  3. 22 May, 2018 1 commit
  4. 19 May, 2018 2 commits
    • Eric Bruneton's avatar
      Fix wrong import! Correct benchmarks results on my machine: · 63efb1aa
      Eric Bruneton authored
      CURRENT CODE (3 runs)
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7841,639 ± 202,570  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1444,529 ±  41,936  ops/s
      getTypeFromDescriptor                                  thrpt   10  4586,855 ± 109,614  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7884,111 ± 187,510  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1448,835 ±  37,332  ops/s
      getTypeFromDescriptor                                  thrpt   10  4578,097 ± 115,033  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7868,005 ± 165,286  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1453,131 ±  32,611  ops/s
      getTypeFromDescriptor                                  thrpt   10  4537,437 ± 111,732  ops/s
      
      NEW CODE (3 runs)
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10   7868,311 ± 205,813  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10   1400,616 ±  47,122  ops/s
      getTypeFromDescriptor                                  thrpt   10  10447,278 ± 285,315  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10   7822,970 ± 180,999  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10   1430,244 ±  39,596  ops/s
      getTypeFromDescriptor                                  thrpt   10  10371,893 ± 308,044  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7709,202 ± 168,070  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1402,382 ±  34,459  ops/s
      getTypeFromDescriptor                                  thrpt   10  8851,335 ± 259,663  ops/s
      63efb1aa
    • Eric Bruneton's avatar
      Remove the use of toCharArray() to remove some memory allocations. Also add a benchmark for Type. · 5db12737
      Eric Bruneton authored
      Results of the benchmark on my machine:
      
      CURRENT CODE (3 runs)
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  8002,137 ± 309,542  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1393,701 ±  37,392  ops/s
      getTypeFromDescriptor                                  thrpt   10  3469,877 ±  90,339  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7950,019 ± 320,668  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1326,380 ±  29,934  ops/s
      getTypeFromDescriptor                                  thrpt   10  3232,627 ±  89,893  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7931,430 ± 243,812  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1355,610 ±  27,042  ops/s
      getTypeFromDescriptor                                  thrpt   10  3469,378 ±  84,797  ops/s
      
      NEW CODE (3 runs)
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7984,723 ± 211,592  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1260,854 ±  26,638  ops/s
      getTypeFromDescriptor                                  thrpt   10  3442,509 ±  83,137  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7863,562 ± 158,205  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1389,624 ±  39,087  ops/s
      getTypeFromDescriptor                                  thrpt   10  3201,957 ±  53,120  ops/s
      
      getArgumentsAndReturnSizeFromDescriptor                thrpt   10  7871,202 ± 231,629  ops/s
      getArgumentsAndReturnTypesFromDescriptor               thrpt   10  1374,364 ±  32,216  ops/s
      getTypeFromDescriptor                                  thrpt   10  3265,688 ±  72,233  ops/s
      5db12737
  5. 14 May, 2018 4 commits
  6. 13 May, 2018 3 commits
  7. 05 May, 2018 3 commits
  8. 04 May, 2018 4 commits
  9. 02 May, 2018 4 commits
  10. 01 May, 2018 3 commits
  11. 26 Apr, 2018 1 commit
    • Eric Bruneton's avatar
      Add an experimental suffix to the new features (also mark them deprecated and... · a05bf33d
      Eric Bruneton authored
      Add an experimental suffix to the new features (also mark them deprecated and show a big warning in the Javadoc). Revert to ASM6 for the default api of the visitors, and use ASM7_EXPERIMENTAL only in tests (only exception: Trace*Visitor classes, which are final). This pattern could allow us to develop any new feature directly in 'master'.
      a05bf33d
  12. 25 Apr, 2018 4 commits
  13. 24 Apr, 2018 3 commits
  14. 23 Apr, 2018 6 commits