1. 29 Jan, 2019 1 commit
  2. 28 Jan, 2019 1 commit
    • Daniel Clifford's avatar
      [torque] Compile and error check all inlined macros · 7215f6d6
      Daniel Clifford authored
      Previously, macros that returned true for "ShouldBeInlined" were only
      compiled if they were called, which made it impossible to
      type/semantic check all Torque code (e.g. newly added methods to
      structs). One might argue that all code should be tested (and thus
      through inlining compiled), but for prototyping, the skipped
      compilations were definitely annoying.
      
      As part of this change, added a ShouldGenerateExternalCode method to
      declarables (by default returns !ShouldBeInlined) that makes it
      possible to suppresses C++ code generation for any method. To
      support this at the lowest level, a NullOStream classes is added as
      part of this patch.
      
      Finally, added support for generating C++ for passing structs as label
      parameters to run previously inlined methods through the
      implementation-visitor for non-inlined compilation.
      
      Bug: v8:7793
      Change-Id: I8ce23382e12ddc25f46222c25729c82433040a73
      Reviewed-on: https://chromium-review.googlesource.com/c/1434378
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#59134}
      7215f6d6
  3. 26 Jan, 2019 1 commit
  4. 25 Jan, 2019 1 commit
  5. 24 Jan, 2019 3 commits
  6. 23 Jan, 2019 2 commits
  7. 22 Jan, 2019 1 commit
  8. 21 Jan, 2019 1 commit
  9. 16 Jan, 2019 1 commit
    • Daniel Clifford's avatar
      [torque] Implement methods and constructors for structs and classes · b615dfa5
      Daniel Clifford authored
      With the changes in this patch,	it is now possible to add methods to
      both Torque's class and struct types. As a special case, "constructor"
      methods are used to initialize the values of classes and structs when
      they are constructed.
      
      The functionality in this patch	includes:
      
      - The refactoring of class- and struct-handling code to share field
        and method declaration code between both.
      
      - Addition of the "%Allocate" intrinsic that allocates raw bytes to be
        allocated from the V8 GC's NewSpace heap as the basis for freshly
        created, initialized class objects.
      
      - An implementation of a CallMethodExpression AST node that enables
        calling methods and constructors, including special handling of
        passing through the "this" pointer for method calls on structs by
        reference. The syntax for struct construction using "{}" remains as
        before, but now calls the struct's matching constructor rather than
        implicitly initializing the struct fields with the initialization
        arguments. A new syntax for allocation classes is introduced: "new
        ClassName{constructor_param1, constructor_param1, ...}", which
        de-sugars to an %Allocate call followed by a call to the matching
        constructor.
      
      - class	constructors can use the "super" keyword to initialize	their
        super class.
      
      - If classes and struct do not have a constructor, Torque creates a
        default constructor for them based on their field declarations,
        where each field's initial value is assigned to a same-typed
        parameter to the the default constructor. The default constructor's
        parameters are in field-declaration order, and for derived classes,
        the default constructor automatically uses a "super" initialization
        call to initialize inherited fields.
      
      - Class field declarations now automatically create ".field" and
        ".field=" operators that create CSA-compatible object accessors.
      
      - Addition of a no-argument constructor for JSArrays that creates an
        empty, PACKED_SMI_ELEMENTS JSArray using the machinery added
        elsewhere in this patch.
      
      Bug: v8:7793
      Change-Id: I31ce5f4b444656ab999555d780aeeba605666bfa
      Reviewed-on: https://chromium-review.googlesource.com/c/1392192
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58860}
      b615dfa5
  10. 10 Jan, 2019 1 commit
    • Daniel Clifford's avatar
      [torque]: Class declarations · d0e95c7a
      Daniel Clifford authored
      Class declarations support structured heap data that is a subtype of
      HeapObject. Only fields of Object subtypes (both strong and weak)
      are currently supported (no scalar fields yet).
      
      With this CL, both the field list macro used with the C++
      DEFINE_FIELD_OFFSET_CONSTANTS macro (to make field offset constants) as
      well as the Torque "operator '.field'" macros are generated for the
      classes declared in Torque. This is a first step to removing the
      substantial amount of duplication and boilerplate code
      needed to declare heap object classes.
      
      As a proof of concept, and handful of class field definitions,
      including those for non trivial classes like JSFunction, have been
      moved to Torque.
      
      Bug: v8:7793
      Change-Id: I2fa0b53db65fa6f5fe078fb94e1db3418f908753
      Reviewed-on: https://chromium-review.googlesource.com/c/1373971
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58704}
      d0e95c7a
  11. 08 Jan, 2019 1 commit
  12. 17 Dec, 2018 1 commit
  13. 14 Dec, 2018 1 commit
    • Daniel Clifford's avatar
      [builtins] Port GetArgumentsFrameAndCount to Torque · a74afec6
      Daniel Clifford authored
      In the process, add the bint type (which stands for Best-INTeger),
      which implements Torque's idea of CSA's ParameterMode. It maps to
      a different type on 32-bit (Smi) and 64-bit (intptr). There are
      convert operators that are either no-ops or conversions
      to-and-from Smi and intptrs on the each platform, depending on
      the underlying type for bint. This allows Torque code to git most
      of the benefits of ParameterMode without having to explicitly
      pass around the mode, since it is almost always OptimalMode anyways.
      
      Change-Id: I92e08adc1d79cb3e24576c96f9734aec1af54162
      Reviewed-on: https://chromium-review.googlesource.com/c/1361160
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58253}
      a74afec6
  14. 11 Dec, 2018 1 commit
    • peterwmwong's avatar
      [builtins] Port TypedArray join, toString, and toLocaleString to Torque. · d1c15973
      peterwmwong authored
      Micro-benchmarks show speed improvements across the various types:
      
      TypedArrays-JoinBigIntTypes                7246   8297  14.50%
      TypedArrays-JoinBigIntTypes                7194   8637  20.06%
      TypedArrays-JoinBigIntTypes                7258   8586  18.30%
      TypedArrays-JoinFloatTypes                24461  28628  17.04%
      TypedArrays-JoinFloatTypes                24523  29647  20.89%
      TypedArrays-JoinFloatTypes                24419  29327  20.10%
      TypedArrays-JoinIntTypes                  23378  33928  45.13%
      TypedArrays-JoinIntTypes                  23333  34034  45.86%
      TypedArrays-JoinIntTypes                  21653  34000  57.02%
      TypedArrays-JoinWithSeparatorBigIntTypes   6620   7339  10.86%
      TypedArrays-JoinWithSeparatorBigIntTypes   6566   7579  15.43%
      TypedArrays-JoinWithSeparatorBigIntTypes   6631   7481  12.82%
      TypedArrays-JoinWithSeparatorFloatTypes   18695  19670   5.22%
      TypedArrays-JoinWithSeparatorFloatTypes   18518  20088   8.48%
      TypedArrays-JoinWithSeparatorFloatTypes   18482  20193   9.26%
      TypedArrays-JoinWithSeparatorIntTypes     17849  21482  20.35%
      TypedArrays-JoinWithSeparatorIntTypes     17831  21578  21.01%
      TypedArrays-JoinWithSeparatorIntTypes     17937  21578  20.30%
      
      Drive-by: Removed unused CSA helper InternalArrayCreate.
      
      Bug: v8:7624
      Change-Id: I8e63815982439cfd2267417d03cd2b71b4b7a812
      Reviewed-on: https://chromium-review.googlesource.com/c/1369330
      Commit-Queue: Peter Wong <peter.wm.wong@gmail.com>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarPeter Marshall <petermarshall@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58167}
      d1c15973
  15. 09 Dec, 2018 1 commit
  16. 07 Dec, 2018 1 commit
  17. 05 Dec, 2018 2 commits
    • Tobias Tebbi's avatar
      [torque] make C++ includes explicit · 82cf1cf2
      Tobias Tebbi authored
      Bug: v8:7793
      Change-Id: I12aae5d61a21f3e6e010e07622fe0d01a5ba03eb
      Reviewed-on: https://chromium-review.googlesource.com/c/1344118
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58052}
      82cf1cf2
    • Daniel Clifford's avatar
      [torque] Add new and refine existing Torque intrinsic support · 79605b45
      Daniel Clifford authored
      Intrinsic changes:
      
      - Rename %RawCast to %RawObjectCast and add error checking so that it
        only applies to subtypes of Objects.
      
      - Add %RawPointerCast, which is similar to %RawObjectCast but must be
        used for all subtypes of RawPtr.
      
      - Add %RawConstexprCast, which allows one constexpr to be be cast to
        another at compile time. It translate to an appropriate static_cast
        in the generated code
      
      - Add %FromConstexpr, which handles most of the standard cases of
        generating XXXConstant CSA nodes from constexpr constants. It uses
        either SmiConstant, NumberConstant, StringConstant, IntPtrConstant
        or Int32Constant, depending on the cast-to type generic <To> type.
      
      - Add support for intrinsics that return constexpr results.
      
      Cleanup:
      
      - Turn FromConstexpr into a generic with two generic types, a <To> and
        a <From> type. Most FromConstexpr can use the new %FromConstexpr
        intrinsic rather than provide an explicit implementation.
      
      Bug: v8:7793
      Change-Id: Icab5db16d203034ec157fa3ad5157d10c7dc8464
      Reviewed-on: https://chromium-review.googlesource.com/c/1357049
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#58049}
      79605b45
  18. 03 Dec, 2018 1 commit
  19. 27 Nov, 2018 1 commit
  20. 23 Nov, 2018 1 commit
    • Caitlin Potter's avatar
      Reland "[builtins] Implement Object.fromEntries" · 8a9cbdac
      Caitlin Potter authored
      This is a reland of a5336471
      
      Original change's description:
      > [builtins] Implement Object.fromEntries
      > 
      > Adds the Object.fromEntries() method behind
      > --harmony-object-from-entries.
      > 
      > 
> Includes an initial implementation of the new experimental builtin
      > Object.fromEntries implemented by Daniel Clifford, and
      > has been modified by Caitlin Potter to support a fast case to skip
      > the iterator protocol when it can be done unobservably in common cases.
      > 
      > There are some incidental changes: A number of CSA macros have been
      > updated to use TNodes, and some Context arguments have been
      > re-arranged to be implicit in Torque.
> 
      > 
      > There are also a number of mjsunit tests written mirroring and
      > expanding on the test262 tests.
      > 
      > BUG=v8:8021
      > 
      > Change-Id: I1c12bee8a2f98c6297b77d5d723910a5e3b630cc
      > Co-authored-by: Daniel Clifford <danno@chromium.org>
      > Co-authored-by: Caitlin Potter <caitp@igalia.com>
      > Reviewed-on: https://chromium-review.googlesource.com/c/1337585
      > Commit-Queue: Daniel Clifford <danno@chromium.org>
      > Reviewed-by: Daniel Clifford <danno@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#57667}
      
      Bug: v8:8021
      Change-Id: I706e2d87bfc2f688e833c1b7d40ca82f5d80f5a2
      Reviewed-on: https://chromium-review.googlesource.com/c/1346630Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Cr-Commit-Position: refs/heads/master@{#57798}
      8a9cbdac
  21. 22 Nov, 2018 1 commit
  22. 21 Nov, 2018 4 commits
    • Daniel Clifford's avatar
      Revert "[torque] Implement intrinsics support" · 46853494
      Daniel Clifford authored
      This reverts commit 74a0ad7d.
      
      Reason for revert: Presubmit tests fail
      
      Original change's description:
      > [torque] Implement intrinsics support
      > 
      > Also add the first intrinsic and usage of it: %RawCast
      > 
      > Bug: v8:7793
      > Change-Id: Id1e3288e8bab6adb510731076a39590e8fd156be
      > Reviewed-on: https://chromium-review.googlesource.com/c/1344152
      > Commit-Queue: Daniel Clifford <danno@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#57692}
      
      TBR=danno@chromium.org,tebbi@chromium.org
      
      Change-Id: Ief78187f2edaf80c715dea676cbd40edd747ad21
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7793
      Reviewed-on: https://chromium-review.googlesource.com/c/1346500Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57694}
      46853494
    • Daniel Clifford's avatar
      [torque] Implement intrinsics support · 74a0ad7d
      Daniel Clifford authored
      Also add the first intrinsic and usage of it: %RawCast
      
      Bug: v8:7793
      Change-Id: Id1e3288e8bab6adb510731076a39590e8fd156be
      Reviewed-on: https://chromium-review.googlesource.com/c/1344152
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57692}
      74a0ad7d
    • Clemens Hammacher's avatar
      Revert "[builtins] Implement Object.fromEntries" · 6abd6f3d
      Clemens Hammacher authored
      This reverts commit a5336471.
      
      Reason for revert: Fails nosnap debug tests: https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux%20-%20nosnap%20-%20debug/21838
      
      Original change's description:
      > [builtins] Implement Object.fromEntries
      > 
      > Adds the Object.fromEntries() method behind
      > --harmony-object-from-entries.
      > 
      > 
> Includes an initial implementation of the new experimental builtin
      > Object.fromEntries implemented by Daniel Clifford, and
      > has been modified by Caitlin Potter to support a fast case to skip
      > the iterator protocol when it can be done unobservably in common cases.
      > 
      > There are some incidental changes: A number of CSA macros have been
      > updated to use TNodes, and some Context arguments have been
      > re-arranged to be implicit in Torque.
> 
      > 
      > There are also a number of mjsunit tests written mirroring and
      > expanding on the test262 tests.
      > 
      > BUG=v8:8021
      > 
      > Change-Id: I1c12bee8a2f98c6297b77d5d723910a5e3b630cc
      > Co-authored-by: Daniel Clifford <danno@chromium.org>
      > Co-authored-by: Caitlin Potter <caitp@igalia.com>
      > Reviewed-on: https://chromium-review.googlesource.com/c/1337585
      > Commit-Queue: Daniel Clifford <danno@chromium.org>
      > Reviewed-by: Daniel Clifford <danno@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#57667}
      
      TBR=danno@chromium.org,caitp@igalia.com,tebbi@chromium.org
      
      Change-Id: Id0cd8b16131f151a42dffbaca7e59ab17c68ab23
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:8021
      Reviewed-on: https://chromium-review.googlesource.com/c/1346116Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57677}
      6abd6f3d
    • Caitlin Potter's avatar
      [builtins] Implement Object.fromEntries · a5336471
      Caitlin Potter authored
      Adds the Object.fromEntries() method behind
      --harmony-object-from-entries.
      
      
Includes an initial implementation of the new experimental builtin
      Object.fromEntries implemented by Daniel Clifford, and
      has been modified by Caitlin Potter to support a fast case to skip
      the iterator protocol when it can be done unobservably in common cases.
      
      There are some incidental changes: A number of CSA macros have been
      updated to use TNodes, and some Context arguments have been
      re-arranged to be implicit in Torque.

      
      There are also a number of mjsunit tests written mirroring and
      expanding on the test262 tests.
      
      BUG=v8:8021
      
      Change-Id: I1c12bee8a2f98c6297b77d5d723910a5e3b630cc
      Co-authored-by: 's avatarDaniel Clifford <danno@chromium.org>
      Co-authored-by: 's avatarCaitlin Potter <caitp@igalia.com>
      Reviewed-on: https://chromium-review.googlesource.com/c/1337585
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57667}
      a5336471
  23. 20 Nov, 2018 2 commits
    • Daniel Clifford's avatar
      Incremental Torque type cleanup · 280776f8
      Daniel Clifford authored
      Includes creating Oddball-specific types.
      
      Change-Id: Ib5d80dfe95838b2deb0a2fcae67c349940970252
      Reviewed-on: https://chromium-review.googlesource.com/c/1342930Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Commit-Queue: Daniel Clifford <danno@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57655}
      280776f8
    • Tobias Tebbi's avatar
      [torque] enable multiple inheritance from Torque-generated assemblers · 00ffe4a6
      Tobias Tebbi authored
      This enables more seamless interop between Torque and CSA:
      
      Since CodeStubAssembler can now inherit from the Torque base namespace,
      macros defined in the base namespace can be used in CodeStubAssembler
      macros, even without qualification.
      At the same time, macros in the base namespace can refer to
      CodeStubAssembler macros. The only new limitation is that types defined
      in code-stub-assembler.h cannot be referenced in the signature of macros
      defined in the base namespace, since this would produce a cyclic header
      dependency. A work-around for this woud be to put such types (like int31
      in this CL) into a separate header included by both. I (mis-)used
      code-assembler.h for that.
      Another side-effec is that types and enums defined in CodeStubAssembler
      have to be accessed in a qualified way from Torque.
      
      Other assemblers can now inherit from their Torque equivalent, so
      porting macros into the corresponding Torque namespace doesn't require
      any change to the existing use-sites.
      
      To avoid C++ ambiguities, the Torque-generated assemblers must not define
      anything also defined in Code(Stub)Assembler. This includes the type
      aliases for TNode, PLabel, ...
      My workaround is to qualify everything in the generated C++.
      
      As a drive-by fix, I had to change the formatter to avoid a situation
      where it doesn't compute a fixed point: putting a keyword at the
      beginning of a line removes the '\s' in front of it, so I replaced that
      with '\b'.
      
      Bug: v8:7793
      Change-Id: If3b9e9ad967a181b380a10d5673615606abd1041
      Reviewed-on: https://chromium-review.googlesource.com/c/1341955Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57645}
      00ffe4a6
  24. 19 Nov, 2018 1 commit
  25. 15 Nov, 2018 1 commit
  26. 13 Nov, 2018 2 commits
  27. 12 Nov, 2018 1 commit
  28. 07 Nov, 2018 1 commit
  29. 05 Nov, 2018 2 commits
    • Tobias Tebbi's avatar
      [torque] qualified access to CSA assemblers · 23b48920
      Tobias Tebbi authored
      No longer use inheritance to associate Torque-generated assemblers
      with corresponding CSA subclasses. Instead, all references to CSA
      and CSA-derived assemblers are now explicitly qualified, by generating
      a short-lived assembler instance in-place. As a consequence, Torque
      files have to mention the assembler external macros live in.
      The CodeStubAssembler is the default for this and can be omitted.
      As a drive-by cleanup, also distinguish between names that are emitted
      in C++ and names that are intended to be read in error messages. This
      is relevant for generic instantiations, where the generated names are
      rather unreadably mangled.
      
      As a follow-up, it will be easy to allow for qualified access to
      different modules, thus implementing full namespace semantics for
      modules.
      
      Bug: v8:7793
      Change-Id: Ie6f1b6b549b510fb49be2442393d898d5f130950
      Reviewed-on: https://chromium-review.googlesource.com/c/1309636
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57235}
      23b48920
    • Tobias Tebbi's avatar
      [torque] cleanup generics and scopes · 06c8ce59
      Tobias Tebbi authored
      - Name lookup in module scopes has namespace semantics now: All
        overloads from all parent modules are combined before overload
        resolution.
      - Allow overloads of different callables: runtime-functions,
        macros, builtins, and generics.
      - The duplication between the DeclarationVisitor and the
        ImplementationVisitor is removed: The DeclarationVisitor creates
        declarables for everything except for implicit generic specializations.
        The ImplementationVisitor iterates over declarables.
        The DeclarationVisitor only looks at the header of declarations, not
        at the body.
      - Modules become Declarable's, which will enable them to be nested.
      - Modules replace the existing Scope chain mechanism, which will make it
        easier to inline macros.
      - The DeclarationVisitor and Declarations become stateless. All state is
        moved to contextual variables and the GlobalContext.
      - Implicit specializations are created directly from the
        ImplementationVisitor. This will enable template parameter inference.
      - As a consequence, the list of all builtins is only available after the
        ImplementationVisitor has run. Thus GenerateBuiltinDefinitions has to
        move to the ImplementationVisitor. Also, this makes it necessary to
        resolve the link from function pointer types to example builtins only
        at this point.
      
      
      Bug: v8:7793
      Change-Id: I61cef2fd3e954ab148c252974344a6e38ee2d01d
      Reviewed-on: https://chromium-review.googlesource.com/c/1304294
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#57231}
      06c8ce59
  30. 31 Oct, 2018 1 commit