1. 23 Feb, 2021 1 commit
    • Georg Neis's avatar
      Eliminate AbstractBytecodeArray and its concrete subclasses · 736d3448
      Georg Neis authored
      AbstractBytecodeArray was introduced in order to let the bytecode
      array accessor work on either a Handle<BytecodeArray> or a serialized
      BytecodeArrayRef. We have since implemented direct heap access for
      bytecode arrays, so we can now remove the abstraction again.
      
      Note that this means that as far as bytecode iteration is concerned
      we no longer access the bytecode array through the BytecodeArrayRef.
      I will remove the obsolete methods from that class in a follow-up CL.
      The downside is the loss of this explicit interface. The upside is
      simplicity and less code. We can justify the downside with the fact
      that the bytecode array data is immutable and thus the Ref indirection
      less meaningful than in other cases.
      
      Bug: v8:7790
      Change-Id: I0fe87b4efd0f77785f5a0917ab213c6031d9cc74
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2707166Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Georg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72955}
      736d3448
  2. 11 Feb, 2021 1 commit
  3. 10 Feb, 2021 4 commits
  4. 15 Dec, 2020 1 commit
  5. 27 Jun, 2019 1 commit
  6. 19 Jun, 2019 1 commit
  7. 23 May, 2019 1 commit
  8. 13 Oct, 2017 1 commit
  9. 21 Nov, 2016 1 commit
  10. 05 Oct, 2016 1 commit
  11. 13 Sep, 2016 1 commit
  12. 15 Jul, 2016 1 commit
  13. 14 Jul, 2016 1 commit
  14. 13 Jul, 2016 1 commit
  15. 21 Jun, 2016 3 commits
  16. 12 May, 2016 1 commit
    • oth's avatar
      [interpreter] Introduce bytecode generation pipeline. · 02b7373a
      oth authored
      This change introduces a pipeline for the final stages of
      bytecode generation.
      
      The peephole optimizer is made distinct from the BytecodeArrayBuilder.
      
      A new BytecodeArrayWriter is responsible for writing bytecode. It
      also keeps track of the maximum register seen and offers a potentially
      smaller frame size.
      
      R=rmcilroy@chromium.org
      LOG=N
      BUG=v8:4280
      
      Review-Url: https://codereview.chromium.org/1947403002
      Cr-Commit-Position: refs/heads/master@{#36220}
      02b7373a
  17. 21 Mar, 2016 1 commit
    • oth's avatar
      [interpreter] Add support for scalable operands. · 48d082af
      oth authored
      This change introduces wide prefix bytecodes to support wide (16-bit)
      and extra-wide (32-bit) operands. It retires the previous
      wide-bytecodes and reduces the number of operand types.
      
      Operands are now either scalable or fixed size. Scalable operands
      increase in width when a bytecode is prefixed with wide or extra-wide.
      
      The bytecode handler table is extended to 256*3 entries. The
      first 256 entries are used for bytecodes with 8-bit operands,
      the second 256 entries are used for bytecodes with operands that
      scale to 16-bits, and the third group of 256 entries are used for
      bytecodes with operands that scale to 32-bits.
      
      LOG=N
      BUG=v8:4747,v8:4280
      
      Review URL: https://codereview.chromium.org/1783483002
      
      Cr-Commit-Position: refs/heads/master@{#34955}
      48d082af
  18. 11 Feb, 2016 3 commits
  19. 03 Feb, 2016 1 commit
  20. 02 Feb, 2016 1 commit
    • oth's avatar
      [interpreter] Move temporary register allocator into own file. · ef93854a
      oth authored
      Moves the temporary register allocator out of the bytecode array
      builder into TemporaryRegisterAllocator class and adds unittests.
      Particular must be taken around the translation window boundary
      motivating the addition of tests.
      
      Also adds a Clear() method to IdentityMap() which is called by
      the destructor. This allows classes to hold an IdentityMap if
      they are zone allocated. Classes must call Clear() before the zone
      is re-cycled or face v8 heap corruption.
      
      BUG=v8:4280,v8:4675
      LOG=N
      
      Review URL: https://codereview.chromium.org/1651133002
      
      Cr-Commit-Position: refs/heads/master@{#33686}
      ef93854a
  21. 29 Jan, 2016 1 commit
    • jkummerow's avatar
      Introduce {FAST,SLOW}_STRING_WRAPPER_ELEMENTS · f4872f74
      jkummerow authored
      String wrappers (new String("foo")) are special objects: their string
      characters are accessed like elements, and they also have an elements
      backing store. This used to require a bunch of explicit checks like:
      
      if (obj->IsJSValue() && JSValue::cast(obj)->value()->IsString()) {
        /* Handle string characters */
      }
      // Handle regular elements (for string wrappers and other objects)
      obj->GetElementsAccessor()->Whatever(...);
      
      This CL introduces new ElementsKinds for string wrapper objects (one for
      fast elements, one for dictionary elements), which allow folding the
      special-casing into new StringWrapperElementsAccessors.
      
      No observable change in behavior is intended.
      
      Review URL: https://codereview.chromium.org/1612323003
      
      Cr-Commit-Position: refs/heads/master@{#33616}
      f4872f74
  22. 28 Jan, 2016 1 commit
    • rmcilroy's avatar
      [Interpreter] Add option to trace bytecode execution. · 6399fce5
      rmcilroy authored
      Adds --trace-ignition flag which allows tracing of bytecodes as they
      execute. As well as printing out the bytecode, this also prints out the
      input and output registers to each operation. The generated output looks
      as follows:
      
       -> 0x350cb46d5264 (139) : 49 fc fb 03 07    Call r4, r5, #3, [7]
            [ accumulator -> 0x177fba00bc99 <JS Array[2]> ]
            [          r4 -> 0x350cb46ce099 <JS Function InstallFunctions (SharedFunctionInfo 0x350cb46470c1)> ]
            [          r5 -> 0x350cb46cddc1 <an Object with map 0x35fdf590a3a9> ]
            [          r6 -> 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
            [          r7 -> 2 ]
            [ accumulator <- 0x350cb4604189 <undefined> ]
       -> 0x350cb46d5978 (47) : 4b f8 00 00 00    CallRuntime [248], r0, #0
            [ accumulator -> 0x350cb4604189 <undefined> ]
            [ accumulator <- 0x350cb4604189 <undefined> ]
       -> 0x350cb46d597d (52) : 23 09             Ldar a0
            [ accumulator -> 0x350cb4604189 <undefined> ]
            [          a0 -> 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
            [ accumulator <- 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
       -> 0x350cb46d597f (54) : 24 fd             Star r3
            [ accumulator -> 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
            [ accumulator <- 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
            [          r3 <- 0x350cb46d3f11 <JS Function Proxy (SharedFunctionInfo 0x350cb46d3e61)> ]
      
      Also adds support for --print_source and --print-ast to the interpreter.
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1640213002
      
      Cr-Commit-Position: refs/heads/master@{#33594}
      6399fce5
  23. 27 Jan, 2016 1 commit
  24. 26 Jan, 2016 1 commit
    • oth's avatar
      [interpreter] Wide register support. · 19df7a20
      oth authored
      This increases the size of register operands to be 16-bit.
      
      Not all bytecodes have wide register variants, so when they are
      needed a register translator will copy them into a small area
      reserved at the top of the 8-bit register range and these registers
      are supplied as arguments to the bytecode with 8-bit operands.
      
      This is non-intrusive for typical bytecode where the number of
      registers is less than 120. For bytecodes with wide register
      operands (above the window) their index needs to be translated
      to avoid the reserved translation window.
      
      Enables splay.js to run in Octane and a handful of mjsunit tests.
      
      BUG=v8:4280,v8:4675
      LOG=NO
      
      Review URL: https://codereview.chromium.org/1613163002
      
      Cr-Commit-Position: refs/heads/master@{#33516}
      19df7a20
  25. 19 Jan, 2016 1 commit
    • oth's avatar
      [Interpreter] Preparation for wide registers. · 68654b64
      oth authored
      o Adds wide variants of bytecodes that have operands describing ranges
        of registers. The upcoming wide register support does not suppport
        re-mapping ranges.
      o Adds kRegPair16 and kRegTriple16 operands required for new wide
        bytecodes and renames Count8/Count16 operands to RegCount8/RegCount16.
      o Removes Exchange bytecodes
      
      BUG=v8:4675
      LOG=NO
      
      Review URL: https://codereview.chromium.org/1595103006
      
      Cr-Commit-Position: refs/heads/master@{#33389}
      68654b64
  26. 18 Jan, 2016 1 commit
  27. 08 Jan, 2016 1 commit
  28. 05 Jan, 2016 1 commit
    • oth's avatar
      [Interpreter] Add support for jumps using constants with wide operands. · 8109f63f
      oth authored
      This increases the size of addressable constant pool entries for jumps
      to match other bytecodes using operands indexing the constant pool.
      
      This change also introduces reservations for constant pool entries.
      Reservations are used for forward jumps to ensure a constant pool entry
      will be available when the jump target (label) is bound and the jump is
      patched up in the bytecode array.
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1546683002
      
      Cr-Commit-Position: refs/heads/master@{#33125}
      8109f63f
  29. 04 Jan, 2016 1 commit
  30. 18 Dec, 2015 1 commit
    • rmcilroy's avatar
      [Interpreter] Generate valid FrameStates in the Bytecode Graph Builder. · 32211800
      rmcilroy authored
      Adds FrameState nodes to graphs built by the Bytecode Graph Builder, in
      preparation for adding deopt support. Also adds a new
      FrameStateType::kInterpretedFunction to allow for specialized deopt
      stack translation for interpreted frames. Finally adds support for
      disabling typed lowering of binary ops, since the current approach
      relies on a FrameState hack which does not apply to interpreted frames
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1514413002
      
      Cr-Commit-Position: refs/heads/master@{#32964}
      32211800
  31. 16 Dec, 2015 1 commit
  32. 17 Nov, 2015 1 commit
    • oth's avatar
      [Interpreter] Add support for Call bytecode to bytecode graph builder. · e8ae8b34
      oth authored
      Adds support for visiting the Call bytecode to the bytecode graph builder.
      This change also adds the call type feedback slot to the Call bytecode.
      This is not currently used by the interpreter, but is used by the
      graph builder.
      
      Also adds a CallWide varient of the Call bytecode, and adds the kCount16
      operand type.
      
      Landed on behalf of rmcilroy.
      
      BUG=v8:4280
      LOG=N
      
      Review URL: https://codereview.chromium.org/1456453002
      
      Cr-Commit-Position: refs/heads/master@{#32033}
      e8ae8b34
  33. 05 Nov, 2015 1 commit