Commit Graph

163 Commits

Author SHA1 Message Date
Ryan Macnak cb210e3997 Enable concurrent sweep on MIPS and ARM64.
Compare ARM from commit f78517a5ba.

Closes #25651.

R=zra@google.com

Review URL: https://codereview.chromium.org/1722013002 .
2016-02-29 09:23:25 -08:00
Florian Schneider d8677964a3 Move precompilation-related flags to flags list.
They become compile-time constants in the precompiled runtime, and in product mode.

In precompiled product mode, the precompiled value has precedence.

BUG=
R=rmacnak@google.com

Committed: https://github.com/dart-lang/sdk/commit/5c9f18c6c87284395564051a052cc4acc9b6f59a

Review URL: https://codereview.chromium.org/1731743003 .
2016-02-25 07:53:39 -08:00
Ryan Macnak bd85deaf4e Revert "Move precompilation-related flags to flags list."
The default value of print_stop_message was architecture specific.

TBR=fschneider@google.com

Review URL: https://codereview.chromium.org/1739593002 .
2016-02-24 18:08:01 -08:00
Florian Schneider 5c9f18c6c8 Move precompilation-related flags to flags list.
They become compile-time constants in the precompiled runtime, and in product mode.

In precompiled product mode, the precompiled value has precedence.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1731743003 .
2016-02-24 17:31:08 -08:00
Florian Schneider b870dafa4f VM: Separate precompilation-specific code, make flags const.
Move optimizations for precompilation into separate file.

Remove precompilation-specific code from flow_graph_optimizer.cc.

Add precompilation-flags: They are const in the precompiled runtime. Started moving flags to use the new flag-definition macros.

Add libdart_lib_precompiled target.

Define PRECOMPILED_RUNTIME_MACRO in more places (dart_precompiled_runtime)

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1714743002 .
2016-02-23 08:48:08 -08:00
Ryan Macnak 3b4a9e7e01 Fix --no-lazy-dispatchers in the JIT.
Broken since bac82e2592.

R=fschneider@google.com

Review URL: https://codereview.chromium.org/1672303002 .
2016-02-08 10:23:19 -08:00
John McCutchan d295b9c311 Remove many features when building product mode
Move all JSON printing code from object.cc to object_service.cc.

Not compiled in:

- Service protocol
- Debugger
- Debugger API
- JSONStream
- ObjectIdRing
- Profiler service
- Object JSON printing

Size of dart_bootstrap before: 5670365 bytes
Size of dart_bootstrap after: 5287631 bytes

Reduction in size: 382734 bytes.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1660063002 .
2016-02-05 09:55:51 -08:00
Regis Crelier 7f57ebcfa1 Remove signature classes from the VM.
They were used as the class of closure instances and as the type class of
function types.
All closure instances now have class _Closure and function types are represented
by a new class FunctionType extending AbstractType.
Fix issue 24567 and add regression test.

R=asiva@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org/1584223006 .
2016-01-19 16:32:59 -08:00
Ryan Macnak 830bfe61b7 Precompilation: Generate instance calls as IC calls that can switch to Megamoprhic calls.
dart2js ARM -10.3% size

R=fschneider@google.com

Review URL: https://codereview.chromium.org/1418863003 .
2015-11-04 09:31:19 -08:00
Srdjan Mitrovic dc2d81b636 Move vm_tags from isolate to thread, since we may have multiple threads in same isolate (GC, background compilation)
BUG=
R=johnmccutchan@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org/1387643002 .
2015-10-05 12:50:17 -07:00
Ryan Macnak f1a0056430 Load the native call wrapper via Thread.
R=fschneider@google.com

Review URL: https://codereview.chromium.org//1358773002 .
2015-09-20 13:48:17 -07:00
Florian Schneider bac82e2592 VM: New calling convention for generated code.
Instead of calling code object directly, call indirectly and
pass the code object in a register. The object pool is then loaded from
the code object. This is another preparation step for making generated code
relocatable.

All non-ia32 platforms:
No entry patching.

ARM:
PC marker (now code object) moves to the same place as on x64 (below saved PP, above saved FP).
R9 is now used as PP, R10 as CODE_REG.

BUG=
R=koda@google.com, rmacnak@google.com

Committed: https://github.com/dart-lang/sdk/commit/1d343e5a7b75168fb6c9f86b64c55173cdbdc9b2

Review URL: https://codereview.chromium.org//1192103004 .
2015-09-19 13:21:09 +02:00
Florian Schneider 7af7a2db87 Revert "VM: New calling convention for generated code."
This reverts commit 1d343e5a7b.

Because of Windows test failures.

BUG=
TBR=whesse@google.com

Review URL: https://codereview.chromium.org//1343373003 .
2015-09-16 13:46:05 +02:00
Florian Schneider 1d343e5a7b VM: New calling convention for generated code.
Instead of calling code object directly, call indirectly and
pass the code object in a register. The object pool is then loaded from
the code object. This is another preparation step for making generated code
relocatable.

All non-ia32 platforms:
No entry patching.

ARM:
PC marker (now code object) moves to the same place as on x64 (below saved PP, above saved FP).
R9 is now used as PP, R10 as CODE_REG.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1192103004 .
2015-09-16 13:05:58 +02:00
Ryan Macnak 690cccf03c Remove remaining uses of null's absolute address from non-IA32.
Note not every file is touched for every architecture because some already load null via Thread in most places.

Don't use absolute stack overflow address when precompiling.

R=fschneider@google.com

Review URL: https://codereview.chromium.org//1332923005 .
2015-09-11 11:34:21 -07:00
Florian Schneider 7e082c1082 VM: Use constant pool also for leaf runtime calls on x64, arm, arm64 and mips.
Remove unused branch/call macro instructions from the assembler.

Setup a frame and pool pointer when invoking leaf runtime functions (in the
deoptimzation stub and store-buffer update stub).

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1314883002 .
2015-08-28 10:46:02 +02:00
Florian Schneider 858f1d811a VM: Cache instructions entry point in RawFunction/RawCode.
This make calling sequences shorter and faster, at the expense of an extra
word in the code object and the instructions object.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1295823003 .
2015-08-19 10:04:39 +02:00
John McCutchan ec675a3b0d Enable allocation tracing for classes owned by vm isolate
- Don't store the allocation tracing toggle bit in the class.
- Make sure that array and context slow path stubs are added to the code object's static call table.
- Add missing MaybeTraceAllocation to context allocation stub.

R=fschneider@google.com

Review URL: https://codereview.chromium.org//1292723002 .
2015-08-14 06:55:05 -07:00
Ryan Macnak d47827b88e Port "Add mapping from address to id for runtime functions."
Delete some out-of-sync DECLAREs.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//1288953003 .
2015-08-13 14:42:31 -07:00
Florian Schneider 63a8e5227d VM: More abstract interface for generating stub calls.
This makes the code in the code generator independent from how stubs
are actually called (i.e. directly embedding the target address, or
indirectly by loading the target address from the code object).

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1270803003 .
2015-08-05 10:18:35 +02:00
Florian Schneider ef7a55281f VM: Load allocation-top and -end via Thread.
Cache a pointer to the isolate's Heap in the Thread object
and use it in generated code for allocation.

Change generated allocation code to load allocation-top and
end via THR (THR->heap.top). This is slightly slower than
embedding the address, but faster than loading it
via the Isolate (THR->isolate->heap.top)

BUG=
R=koda@google.com

Review URL: https://codereview.chromium.org//1263513002 .
2015-08-03 16:26:23 +02:00
Florian Schneider 8d38a58c18 Make array allocation stub shared between isolates.
This allows to make the last explicitly named stubs shared between isolates.

When sharing code stubs, we can't do patching at their entry anymore.
Therefore, I had to remove patching support of the array allocation stub.
Is this a functionality we want to keep?

The change is mostly performance-neutral because optimized code has an inlined fast
path for array allocation and only uses the stub for the slow-case.

The only isolate-specific stubs left are object allocation stubs which are
associated with their Class are per-isolate.

Since this CL removes any isolate-specific stubs from StubCode, it becomes AllStatic.

BUG=
R=koda@google.com

Review URL: https://codereview.chromium.org//1247783002 .
2015-07-23 12:56:16 +02:00
Florian Schneider 11733fb5b6 VM: Fix more places with isolate embedded into unoptimized code.
Sharing unoptimized code between isolates requires removing all isolate-specific
immediates embedded into code and loading the isolate from the Thread object.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1248113003 .
2015-07-23 12:34:57 +02:00
Florian Schneider 0cf617ef13 VM: Refactor allocation stats code and remove duplicate code.
Make context allocation stub shared between isolates.

The fast-path used in optimized code still has isolate-specific
addresses inlined for performance reasons.

Common functions are moved into class_table.h/.cc.

This is a preparation for adding an isolate-independent version of the
allocation code and allocation tracking code.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//1241863002 .
2015-07-17 15:15:33 +02:00
John McCutchan e89b2eeaac Trace allocation of arrays
BUG=
R=fschneider@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//1226143011 .
2015-07-10 13:06:17 -07:00
Daniel Andersson 7f890eeecf Support per-thread zones and stack resources.
This is needed to enable parallel marking/sweeping (and in the future, compilation) tasks to have their own zone allocations and to safely call code that relies on various scoped constructs (stack resources).

The next step is to migrate the scopes like NoSafepointScope, NoHandleScope, etc. from isolate- to thread-based interfaces.

NOTE: This is a copy of issue 1204303003.

BUG=

Review URL: https://codereview.chromium.org//1226403003 .
2015-07-09 11:22:26 -07:00
John McCutchan bb934552ea Extend allocation profile testing
- Add ProfileTrieWalker to help with testing.
- Extend allocation profile test to check for expected stack trace.
- Don't inline allocation of class when allocation tracing is enabled.

Dependency: https://codereview.chromium.org/1210333002/

R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1210283003.
2015-06-26 12:22:08 -07:00
Ryan Macnak 66194d4fc1 Port "Add flag to disable lazy compilation of invocation dispatchers."
Fix InvokeNoSuchMethodDispatcher to propagate with a rethrow instead of a throw.

Fix unit test checking raw stack frames.

R=fschneider@google.com

Review URL: https://codereview.chromium.org//1191813002.
2015-06-18 10:23:39 -07:00
Florian Schneider 957af25419 Use object pool for runtime calls.
Also, set up a stub frame with object pool loaded in all stubs on those
platforms.  This is a preparation step to making code relocatable.

ia32 is not affected because there is no object pool.

BUG=
R=srdjan@google.com

Review URL: https://codereview.chromium.org//1189573004.
2015-06-17 10:37:52 +02:00
Daniel Andersson a410c0f993 Thread-local store buffers, v2
BUG=
R=iposva@google.com

Review URL: https://codereview.chromium.org//1168483003.
2015-06-09 09:33:36 -07:00
Srdjan Mitrovic e68d22ce1e Do not emit debug check in optimized IC stubs
BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org//1145063003
2015-05-28 09:32:12 -07:00
Florian Schneider e0621416f8 Remove unused pc descriptor types.
kClosureCall and kOptStaticCall are not needed anymore.
Closure calls are implemented as instance calls - the ClosureCall instruction
 only occurs in the synthetic FunctionImpl.call dispatcher - and does not correspond
to a source location where breakpoints can be set.

kOptStaticCall is not needed because breakpoints can only be set in unoptimized
code. kOther is used instead.

This also removes an unused PC descriptor at closure calls from unoptimized
code.

BUG=
R=vegorov@google.com

Review URL: https://codereview.chromium.org//1160063002
2015-05-28 14:27:37 +02:00
Srdjan Mitrovic 91651f8805 Remove value check from ICData checks/house-keeping
BUG=
R=johnmccutchan@google.com, vegorov@google.com

Review URL: https://codereview.chromium.org//1153963002
2015-05-27 13:17:28 -07:00
Daniel Andersson 6542a451c3 Refactor Isolate -> Thread in NativeArguments and exception handler jump.
Further reduces the one-to-one assumption about isolates and threads: native entries now ask the thread for its isolate, rather than the other way around.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//1156143003
2015-05-26 16:49:51 -07:00
Daniel Andersson fd890f4097 Cache current thread in a reserved register and use it in LoadIsolate
Add THR register that caches the current thread in generated code.
Shuffle some registers around as needed to free one up.

Note: Assembler::LoadIsolate now always loads the *current* isolate whenever the code is executed, rather than the isolate in which the code was compiled (no existing code was affected by this slight change in semantics).

Rewrite some ia32 stubs to use one less register, and for some ia32 bigint intrinsics, explicitly save THR (like CTX in the past, see r44699).

Next steps:
- pass current thread rather than isolate in NativeArguments
- ditto for exception handler jump
- migrate fields vm_tag, top_exit_frame_info, etc. to thread

R=srdjan@google.com

Review URL: https://codereview.chromium.org//1156593002
2015-05-26 13:46:12 -07:00
Florian Schneider d7c3833163 Store FP instead of SP in the exit info when transitioning from Dart to C++.
The exit frame info should contain the FP, not SP. This only worked so
far because FP == SP in the three exit-stubs affected
(CallToRuntime-, CallNativeCFunction-, CallBootstrapCFunction-stub).

This change has no performance implications but allows to set up a general
frame (frame size > 0) in those stubs if needed.

BUG=
R=srdjan@google.com

Review URL: https://codereview.chromium.org//1139163004
2015-05-20 10:23:09 +02:00
srdjan@google.com 4cce388543 Add flag --support_debugger, controls emitting single stepping checks. Disable in --noopt, 6% gain.
R=fschneider@google.com

Review URL: https://codereview.chromium.org//1127523004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45641 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-08 10:33:12 +00:00
fschneider@google.com 399e2a160a VM: Don't emit usage counter code when optimizations are disabled.
Review URL: https://codereview.chromium.org//1127453003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45530 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-05 17:06:18 +00:00
srdjan@google.com ce1e6777b1 Move megamorphic lookup code to stub instead of inlining. Preformance loss < 5%, instruction size reduced by 30% (when using always-megamorphic).
R=fschneider@google.com

Review URL: https://codereview.chromium.org//1125623003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45525 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-05 14:07:48 +00:00
koda@google.com db58faa53e Fix array allocation overflow check on arm/arm64/mips.
When adding an object size in bytes to the allocation top address,
we must check for *unsigned* overflow, not signed overflow. 32-bit example:
if top is 0xfffff000 and size is 0x1008, then top + size is an unsigned,
but not a signed, overflow.

Add similar unit test for typed data (same issue).

BUG=23254
R=regis@google.com

Review URL: https://codereview.chromium.org//1096063002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45354 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-22 18:32:37 +00:00
regis@google.com 6404ee602e Replace MIPS TraceSimMsg calls with Comment calls.
R=zra@google.com

Review URL: https://codereview.chromium.org//1074533002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44981 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-08 19:59:50 +00:00
fschneider@google.com 9709db7f76 VM: Add infrastructure to support deferred generation of unoptimized code.
Add deferred deoptimization instructions for return address, pc marker and
object pool pointer. This enables generating unoptimized code lazily
on deoptimization.

This CL does not change the way unoptimized code is generated or collected
yet, but just provides the mechanisms needed. This can be used to allow
code GC for the unoptimized code of optimized functions.

R=iposva@google.com

Review URL: https://codereview.chromium.org//1052563003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44934 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-07 12:32:22 +00:00
koda@google.com c1008f15c0 Save top StackResource in entry frame.
This avoids relying on stack address order, which enables us to benefit from AddressSanitizer's detect_stack_use_after_return feature.

R=iposva@google.com

Review URL: https://codereview.chromium.org//944783002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43927 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-20 20:46:31 +00:00
regis@google.com fc919001c5 Improve generated MIPS code for conditional expressions and branches by delaying
emission of comparison code.
Improve instruction tracing in all simulators.

R=zra@google.com

Review URL: https://codereview.chromium.org//817593002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42555 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-22 20:50:15 +00:00
srdjan@google.com 71df57b247 Fix crash in observatory: stub code do not have inlined intervals information. Added more comments to inline cache stub code.
Review URL: https://codereview.chromium.org//818443003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42547 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-22 13:24:31 +00:00
srdjan@google.com 72ff873c0b Add code comments to inline cache stubs.
R=hausner@google.com

Review URL: https://codereview.chromium.org//815173002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42520 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-19 18:39:58 +00:00
vegorov@google.com aa48bd4759 Range feedback for arithmetic operations.
In addition to tracking input and output ranges in the IC-stubs with a Smi fastpath (SmiAdd and SmiSub, currently) this CL also introduces two IC stubs that have no fast-path by still track ranges and update the range feedback.

We are able to distinguish between the following ranges (encoding of the lattice is shown in the parens):

- u-smi  (0000)
- smi    (0001)
- uint31 (0010)
- int32  (0011)
- uint32 (0100)
- int64  (1xxx) and (x1x1)

BUG=
R=fschneider@google.com, srdjan@google.com, zra@google.com

Review URL: https://codereview.chromium.org//735543003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42370 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-15 18:48:15 +00:00
fschneider@google.com 876193b31a Make CTX allocatable by the register allocator.
This change makes CTX available by not caching the current
context while in Dart code. Instead the current context
is held in a local variable (:saved_current_context_var) and
is passed as argument in CTX at calls.

This also simplifies a lot of code in the debugger: As a result,
Isolate::top_context is not needed anymore since the current context
can always be extracted from a Dart frame.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//678763004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41422 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-30 15:42:38 +00:00
fschneider@google.com cedcd90984 Remove dead code from InvokeDartCode stub.
R=vegorov@google.com

Review URL: https://codereview.chromium.org//678993004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41316 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-27 13:43:17 +00:00
fschneider@google.com 1dc4e979d9 Remove isolate pointer from context objects.
By moving all stubs that do runtime calls into the isolate
we don't need to cache the current isolate in each context
object.

This saves space on each context at the cost of duplicating stubs
in each isolate. Most stubs are already isolate-specific and the total number
 of stubs is small enough for this to be a good trade-off.

R=vegorov@google.com

Review URL: https://codereview.chromium.org//668193002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41279 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 12:19:20 +00:00