7348a4f236177005123c181da13b3db65ca0bf37 |
|
26-Jun-2017 |
Roland Levillain <rpl@google.com> |
Only look for method optimization annotations in the bootstrap class loader. When checking for an optimization annotation (FastNative or CriticalNative) on a method, do not resolve the method's annotations' classes as a side effect -- instead, look them up in the bootstrap class loader's resolved types. This is to prevent exceptions from being thrown (during class resolution) in JNI transitions. This change does not affect annotation lookup rules in the context of reflection. (cherry-picked from commit 35e42f0ab3b70203038fe037ee50d39e2d37af9a) Test: art/test/testrunner/testrunner.py -t 656-annotation-lookup-generic-jni Bug: 38454151 Bug: 34659969 Change-Id: Ie6b8b30b96a08baa629c449e3803a031515508d1 (cherry picked from commit 2ed6cce6fcfd031b0f9d83111f01b6b48ead1a32)
|
b0326fe10f66417478f4d76038e43a86db3d6995 |
|
26-Jun-2017 |
Roland Levillain <rpl@google.com> |
Fix the stack at the beginning of the Generic JNI trampoline. Fix up a callee-save frame at the bottom of the stack while we check for optimization annotations, thus allowing stack walking until the completion of the JNI frame creation. Test: art/test/testrunner/testrunner.py -t 656-annotation-lookup-generic-jni Bug: 38454151 Bug: 34659969 Change-Id: I70dc3d40139198f29457dba5282b45a9d0d09e49 Merged-In: I70dc3d40139198f29457dba5282b45a9d0d09e49 (cherry picked from commit a5385510cf884ee1a44577bf2019093937134a84)
|
d78ddec5f8eaf1f27e9043f6f42be90149ccb966 |
|
19-Apr-2017 |
Alex Light <allight@google.com> |
Implement can_generate_native_method_bind capability This capability lets one observe and even replace the implementations of native methods when they are bound. Test: ./test.py --host -j40 Bug: 37432636 Change-Id: I2432a8e4da1a677e8011ce495296f4ab9f42eb3e
|
bc82f08243a44dc26606e59b417c0480b3d07d44 |
|
11-Apr-2017 |
Andreas Gampe <agampe@google.com> |
ART: Move trampoline logging to -verbose:dex Move invoke logging to VLOG(dex). (cherry picked from commit 9e6dee2569ba3ec393b91ee4afe0f63a4daecfa9) Bug: 37158297 Test: m test-art-host Change-Id: Ib29b3920e8f227395b99a9ed65de5ca10c737cc0
|
9e6dee2569ba3ec393b91ee4afe0f63a4daecfa9 |
|
11-Apr-2017 |
Andreas Gampe <agampe@google.com> |
ART: Move trampoline logging to -verbose:dex Move invoke logging to VLOG(dex). Bug: 37158297 Test: m test-art-host Change-Id: Ib29b3920e8f227395b99a9ed65de5ca10c737cc0
|
cbcedbf9382bc773713cd3552ed96f417bf1daeb |
|
13-Mar-2017 |
Mathieu Chartier <mathieuc@google.com> |
Add method info to oat files The method info data is stored separately from the code info to reduce oat size by improving deduplication of stack maps. To reduce code size, this moves the invoke info and inline info method indices to this table. Oat size for a large app (arm64): 77746816 -> 74023552 (-4.8%) Average oat size reduction for golem (arm64): 2% Repurposed unused SrcMapElem deduping to be for MethodInfo. TODO: Delete SrcMapElem in a follow up CL. Bug: 36124906 Test: clean-oat-host && test-art-host-run-test Change-Id: I2241362e728389030b959f42161ce817cf6e2009
|
5667f56867383fc4113aa4a6551efdf9f48ee5e7 |
|
28-Feb-2017 |
Jeff Hao <jeffhao@google.com> |
Modify invoke interface trampoline to pass interface method. This avoids touching the code item in the case that the interface method is resolved and in the dex cache. If it's not, the trampoline will still have to go to the code item to try to resolve it. Bug: 35800981 Test: mm test-art-host Change-Id: Ia0e1d23429b3b928bcec727f4f2f16b7834408e5
|
d776ff08e07494327716f0d2ea1a774b2ebfbca9 |
|
17-Jan-2017 |
Mathieu Chartier <mathieuc@google.com> |
Add invoke infos to stack maps Invoke info records the invoke type and dex method index for invokes that may reach artQuickResolutionTrampoline. Having this information recorded allows the runtime to avoid reading the dex code and pulling in extra pages. Code size increase for a large app: 93886360 -> 95811480 (2.05% increase) 1/2 of the code size increase is from making less stack maps deduped. I suspect there is less deduping because of the invoke info method index. Merged disabled until we measure the RAM savings. Test: test-art-host, N6P boots Bug: 34109702 Change-Id: I6c5e4a60675a1d7c76dee0561a12909e4ab6d5d9
|
c069a30d42aefd902c20e8bc09dfad1683f07ded |
|
18-Jan-2017 |
Orion Hodson <oth@google.com> |
ART: invoke-custom support Adds invoke-custom instruction to the interpreter. Bug: 33191717,30550796 Test: art/test/run-test --host 952 Change-Id: I3b754128649a8b3a00ade79ba2518d0e377f3a1e
|
575d3e60c68b5cf481b615dde4a16283507b19ed |
|
06-Feb-2017 |
Mathieu Chartier <mathieuc@google.com> |
Clean up code info table layout Previously: Table layout was computed multiple places like stack_map_stream, and getters. This made it difficult to add new stack map tables and made the code hard to understand. This change makes the table layout specified all inside of the code info. Updating the layout only requires changing ComputeTableOffsets. Changed the stack map inline info offset to be an index, so that it is not require the inline infos are directly after the dex register table. Oat file size for a large app: 94459576 -> 93882040 (-0.61%) Updated oatdump and fixed a bug that was incorrectly computing the register mask bytes. Bug: 34621054 Test: test-art-host Change-Id: I3a7f141e09d5a18bce2bc6c9439835244a22016e
|
433b79a9130df5f2375b9d3d7518c1f3fb84a467 |
|
30-Jan-2017 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Make --debuggable rely on JIT code."" Fixed by https://android-review.googlesource.com/#/c/330165/ This reverts commit 81356645157af44152c7b7db383596b5cf3479b5. Change-Id: Ifb74e1cc90ab6dea621f7f54a00b540d6ccd0cf6
|
81356645157af44152c7b7db383596b5cf3479b5 |
|
30-Jan-2017 |
Vladimir Marko <vmarko@google.com> |
Revert "Make --debuggable rely on JIT code." Breaks 137-cfi with ART_TEST_RUN_TEST_DEBUGGABLE=true This reverts commit a0619e25aacf8b8074132f4951f75fdbcfd42925. bug: 28769520 Change-Id: Ifd7b8fc7c9b72c0a523fd57c4b1b80edd3547caa
|
a0619e25aacf8b8074132f4951f75fdbcfd42925 |
|
20-Dec-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Make --debuggable rely on JIT code. Removes -Xfully-deoptable in the process, which was added as a temporary workaround until this CL. Partial revert of https://android-review.googlesource.com/#/c/302232/ Makes things consistent with existing infrastructure: - Parse the --debuggable from the compiler options, just like --compiler-filter. - Add DEBUG_JAVA_DEBUGGABLE, passed by the zygote, for debuggable apps. - Java debuggable now solely relies on JIT for simplicity. - Debugging under userdebug for non-java-debuggable apps is still best effort. Test: test-art-host, jdwp bug: 28769520 Change-Id: Id0593aacd85b9780da97f20914a50943957c858f
|
fea84ddbccae1c1242d6a1815f6580d758bae8c7 |
|
16-Jan-2017 |
Orion Hodson <oth@google.com> |
ART: Fix artInvokePolymorphic. artInvokePolymorphic called the wrong visit method on RememberForGcArgumentVisitor. It should have called VisitArguments() rather than Visit(). Bug: 30550796,33191393 Test: art/test/run-test 953 Test: m test-art-run-test Change-Id: I46442203e8dc7000efd2cd64b2dcd5ed83163be6
|
ac141397dc29189ad2b2df41f8d4312246beec60 |
|
13-Jan-2017 |
Orion Hodson <oth@google.com> |
Revert "Revert "ART: Compiler support for invoke-polymorphic."" This reverts commit 0fb5af1c8287b1ec85c55c306a1c43820c38a337. This takes us back to the original change and attempts to fix the issues encountered: - Adds transition record push/pop around artInvokePolymorphic. - Changes X86/X64 relocations for MacSDK. - Implements MIPS entrypoint for art_quick_invoke_polymorphic. - Corrects size of returned reference in art_quick_invoke_polymorphic on ARM. Bug: 30550796,33191393 Test: art/test/run-test 953 Test: m test-art-run-test Change-Id: Ib6b93e00b37b9d4ab743a3470ab3d77fe857cda8
|
0fb5af1c8287b1ec85c55c306a1c43820c38a337 |
|
11-Jan-2017 |
Orion Hodson <oth@google.com> |
Revert "ART: Compiler support for invoke-polymorphic." This reverts commit 02e3092f8d98f339588e48691db77f227b48ac1e. Reasons for revert: - Breaks MIPS/MIPS64 build. - Fails under GCStress test on x64. - Different x64 build configuration doesn't like relocation. Change-Id: I512555b38165d05f8a07e8aed528f00302061001
|
02e3092f8d98f339588e48691db77f227b48ac1e |
|
01-Dec-2016 |
Orion Hodson <oth@google.com> |
ART: Compiler support for invoke-polymorphic. Adds basic support to invoke method handles in compiled code. Enables method verification for methods containing invoke-polymorphic. Adds k45cc/k45rc output to Instruction::DumpString() which was found to be missing when enabling verification. Include stack traces in test 957-methodhandle-transforms for failures so they can be easily identified. Bug: 30550796,33191393 Test: art/test/run-test 953 Test: m test-art-run-test Change-Id: Ic9a96ea24906087597d96ad8159a5bc349d06950
|
f5769e15aa9f058a5af987f0d1354f16f4464a7d |
|
11-Jan-2017 |
Mathieu Chartier <mathieuc@google.com> |
Move most of art::Thread to ObjPtr Bug: 31113334 Test: test-art-host Change-Id: I73d0de3c875d3ec3d732034fdc961dae79ef4070
|
1b8464d17c2266763714ae18be7c4dc26e28bf61 |
|
13-Nov-2016 |
Alexey Frunze <Alexey.Frunze@imgtec.com> |
MIPS32: Pass more arguments in registers. Specifically, use A0-A3,T0-T1 for non-floats and F8-F19 for floats. Test: booted MIPS32R2 in QEMU Test: test-art-target-run-test-optimizing (MIPS32R2) on CI20 Test: test-art-target-gtest (MIPS32R2) on CI20 Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU Test: test-art-target-run-test-optimizing (MIPS32R6) in QEMU Test: test-art-target-gtest (MIPS32R6) in QEMU Test: test-art-host-gtest Change-Id: Ib8b0310a109d9f3d70119c1e605e54b013e60728
|
ef41db7a3f322a1feb305fdb457410c4cea94d00 |
|
26-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Move interpreter to ObjPtr Moved most of interpreter, interpreter_common, interpreter_switch_impl, and some of mterp to ObjPtr. Bug: 31113334 Test: test-art-host ART_TEST_INTERPRETER=true Test: art/tools/run-libcore-tests.sh '--mode=host' '--variant=X32' --debug Change-Id: I0935d18287e1332205c17c5a018aa167788ab897
|
709b070044354d9f47641f273edacaeeb0240ab7 |
|
13-Oct-2016 |
David Sehr <sehr@google.com> |
Remove mirror:: and ArtMethod deps in utils.{h,cc} The latest chapter in the ongoing saga of attempting to dump a DEX file without having to start a whole runtime instance. This episode finds us removing references to ArtMethod/ArtField/mirror. One aspect of this change that I would like to call out specfically is that the utils versions of the "Pretty*" functions all were written to accept nullptr as an argument. I have split these functions up as follows: 1) an instance method, such as PrettyClass that obviously requires this != nullptr. 2) a static method, that behaves the same way as the util method, but calls the instance method if p != nullptr. This requires using a full class qualifier for the static methods, which isn't exactly beautiful. I have tried to remove as many cases as possible where it was clear p != nullptr. Bug: 22322814 Test: test-art-host Change-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24
|
1a5337fff2cc6cb9d563c8b32aca75f485d23373 |
|
13-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ObjectArray to ObjPtr Also reduce calls to ObjPtr::Ptr. Bug: 31113334 Test: test-art-host -j32 Change-Id: I73e1b356972bb079b66332f00f7f07451601044e
|
1432a5bb0608a920e7281b38ee5f6e8dfcfae5ef |
|
05-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Don't push handle scope for critical native generic JNI Leaving a stale handle scope causes problems for the GC the next time roots are visited. At this point the stack will have other contents and the GC will attempt to mark many invalid roots. Bug: 31933313 Test: non preopt eng build booting. Test: test-art-host (cherry picked from commit 92879f9bbcfc034660ed1ff5ef741d7f2bcb116f) Change-Id: I7d57964ccd2b59a05bb06f67062f646362ce1204
|
92879f9bbcfc034660ed1ff5ef741d7f2bcb116f |
|
05-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Don't push handle scope for critical native generic JNI Leaving a stale handle scope causes problems for the GC the next time roots are visited. At this point the stack will have other contents and the GC will attempt to mark many invalid roots. Bug: 31933313 Test: non preopt eng build booting. Test: test-art-host Change-Id: I26607c271a2f50a8a8ab745e8d665e4b3c0778a5
|
1cc62e4ea24828fdb3f3da0b8603f0b107d09a04 |
|
04-Oct-2016 |
Mathieu Chartier <mathieuc@google.com> |
Rename ObjPtr::Decode to ObjPtr::Ptr Done to prevent ambiguity with ScopedObjectAccess::Decode. Bug: 31113334 Test: test-art-host Change-Id: I07a2497cc9cf66386311798933547471987fc316
|
0795f23920ee9aabf28e45c63cd592dcccf00216 |
|
28-Sep-2016 |
Mathieu Chartier <mathieuc@google.com> |
Clean up ScopedThreadStateChange to use ObjPtr Also fixed inclusion of -inl.h files in .h files by adding scoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h Changed AddLocalReference / Decode to use ObjPtr. Changed libartbenchmark to be debug to avoid linkage errors. Bug: 31113334 Test: test-art-host Change-Id: I4d2e160483a29d21e1e0e440585ed328b9811483
|
75a7db67f0e56bc0ccc63df4a6a1bb04ab3e86b1 |
|
26-Sep-2016 |
Andreas Gampe <agampe@google.com> |
ART: Factor out IMT from ArtMethod Move IMT Conflict Table to its own file. Move IMT index computation to ImTable. In preparation for code using this independent of specific ArtMethods. Bug: 31594153 Test: m test-art-host Change-Id: Ifd6e304bb86724c5284984c4655c43d3af357f84
|
06a04e0e776875303577c2d871b53a53c78da1b5 |
|
14-Sep-2016 |
Igor Murashkin <iam@google.com> |
jni: Implement generic JNI support for @CriticalNative/@FastNative Also: * Extend existing test cases to check generic JNI for the above. * Re-enable previously blacklisted @CriticalNative JNI run-tests. Bug: 31400248 Change-Id: I436ed00c8b8880e936a0c3483bc0dc251f0c0ce2
|
be08cf5782c04d876d38be8b8d1caf1b4c3fbe55 |
|
13-Sep-2016 |
Mathieu Chartier <mathieuc@google.com> |
Fix moving GC bugs in entrypoints In FindMethodFromCode, there was missing handles for objects used after a suspend point (ResolveType). For check_jni, JniMethodEndWithReferenceHandleResult did not handlarize the return value when calling CheckReferenceResult. For CheckReferenceResult, the argument was not in a handle. Bug: 31458474 Change-Id: I06617fc63f1fb63d7c13ad4245223a8c54fa4b98
|
bdf7f1c3ab65ccb70f62db5ab31dba060632d458 |
|
31-Aug-2016 |
Andreas Gampe <agampe@google.com> |
ART: SHARED_REQUIRES to REQUIRES_SHARED This coincides with the actual attribute name and upstream usage. Preparation for deferring to libbase. Test: m Test: m test-art-host Change-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518
|
fd36f1f927c138575184a1f4c7ea4e7abb3e2dbf |
|
03-Aug-2016 |
Vladimir Marko <vmarko@google.com> |
Rename callee save enumerators. And related image method enumerators, macros, etc. Clean up some entrypoint assembly comments. This is a follow-up to https://android-review.googlesource.com/252348 Test: Run ART test suite on host and Nexus 9. Bug: 30212852 Change-Id: I2707342d4255c88c547655be83ed97a67e12ae9e
|
542451cc546779f5c67840e105c51205a1b0a8fd |
|
26-Jul-2016 |
Andreas Gampe <agampe@google.com> |
ART: Convert pointer size to enum Move away from size_t to dedicated enum (class). Bug: 30373134 Bug: 30419309 Test: m test-art-host Change-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269
|
e01e3644205c3644546889237c20185391a0092e |
|
25-Jul-2016 |
Andreas Gampe <agampe@google.com> |
ART: Add pointer-size template to some reflection functions The unstarted runtime may run code for a different pointer size, even when no transaction is active (e.g., during startup). To retain performance when the runtime is up and executing under normal conditions, add a template parameter and use sizeof(void*) in places where it is adequate. For maintainability, it is necessary to drop the default for the transaction template parameter. Implicit conversions from bool to size_t may lead to incorrect code and hard to diagnose problems. So instead ensure that all callers must give all template parameter values. Test: m test-art-host Change-Id: I3076883422c8553ede4de5642409c5684a5a9aa8
|
465ecc86ff65ca546629630c9469deb6d2d8137e |
|
19-Jul-2016 |
Matthew Gharrity <gharrma@google.com> |
Revert "Revert "Refactor GetIMTIndex"" Originally reverted in order to revert https://android-review.googlesource.com/#/c/244190/ but can now be merged again. This reverts commit d4ceecc85a5aab2ec23ea1bd010692ba8c8aaa0c. Test: m test-art-host Change-Id: Id9205f2b77a378fc0f06088e78c66e81a49f712d
|
df2d4f22d5e89692c90b443da82fe2930518418b |
|
30-Jun-2016 |
Artem Udovichenko <artem.u@samsung.com> |
Revert "Revert "Optimize IMT"" This reverts commit 88f288e3564d79d87c0cd8bb831ec5a791ba4861. Test: Includes smali tests to exercise cts failures that led to revert. These tests check that objects that don't implement any interfaces are handled properly when interface methods are invoked on them. Bug: 29188168 (for initial CL) Bug: 29778499 (reason for revert) Change-Id: I49605d53692cbec1e2622e23ff2893fc51ed4115
|
a62cb9bb6cb2278cb41ab0664191623e178c6a4f |
|
30-Jun-2016 |
Artem Udovichenko <artem.u@samsung.com> |
Revert "Revert "Optimize IMT"" This reverts commit 88f288e3564d79d87c0cd8bb831ec5a791ba4861. Change-Id: I49605d53692cbec1e2622e23ff2893fc51ed4115
|
5bf7bacc0993a2efd9b0765813928ff72ea4bb9f |
|
06-Jul-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Inline and optimize interface calls."" This reverts commit 19dc255bf94a4229de8627a2079ee6f0e9005e2d. Change-Id: Ifc3a92280878d4db1b460d486137497b3456beae
|
19dc255bf94a4229de8627a2079ee6f0e9005e2d |
|
06-Jul-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Inline and optimize interface calls." Went ahead too quickly. This reverts commit d9faceaa8da92f4a56c2907de949081bd42faf79. Change-Id: I1610deaf89b38037cf2786d135a59c48b10ced0c
|
d9faceaa8da92f4a56c2907de949081bd42faf79 |
|
06-Jul-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Inline and optimize interface calls. - Support for inlining methods with invoke-interface (the previous performance limitation is now fixed with the new ImtConflictTable). - Turn non inlineable invoke-interface into invoke-virtual to avoid any potential execution of the conflict trampoline. test:609-checker-inline-interface Change-Id: Ibe33bc945deaada8fb78541e6e0bf034ebb52420
|
88f288e3564d79d87c0cd8bb831ec5a791ba4861 |
|
29-Jun-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Optimize IMT" Bug: 29188168 (for initial CL) Bug: 29778499 (reason for revert) This reverts commit badee9820fcf5dca5f8c46c3215ae1779ee7736e. Change-Id: I32b8463122c3521e233c34ca95c96a5078e88848
|
d4ceecc85a5aab2ec23ea1bd010692ba8c8aaa0c |
|
29-Jun-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Refactor GetIMTIndex" I need to revert this to get https://android-review.googlesource.com/#/c/244190/ to cleanly revert. Matthew, do you mind rewriting it? This reverts commit 50706437d8216e41f0fea1e413cda7891324d397. Change-Id: I5c1435f5dffb46dbb5b613b22adb88c7770304f2
|
fd43db68d204caaa0e411ca79a37af15d1c001af |
|
29-Jun-2016 |
Jeff Hao <jeffhao@google.com> |
Revert "Optimize IMT" This reverts commit 0790af1391b316c5c12b4e135be357008c060696. Bug: 29188168 (for initial CL) Bug: 29778499 (reason for revert) Change-Id: I2c3e4ec2cebdd40faec67ddb721b7acdc8e90061
|
0790af1391b316c5c12b4e135be357008c060696 |
|
13-May-2016 |
Nelli Kim <nelli.kim@samsung.com> |
Optimize IMT * Remove IMT for classes which do not implement interfaces * Remove IMT for array classes * Share same IMT Saved memory (measured on hammerhead): boot.art: Total number of classes: 3854 Number of affected classes: 1637 Saved memory: 409kB Chrome (excluding classes in boot.art): Total number of classes: 2409 Number of affected classes: 1259 Saved memory: 314kB Google Maps (excluding classes in boot.art): Total number of classes: 6988 Number of affected classes: 2574 Saved memory: 643kB Performance regression on benchmarks/InvokeInterface.java benchmark (measured timeCall10Interface) 1st launch: 9.6% 2nd launch: 6.8% Bug: 29188168 (cherry picked from commit badee9820fcf5dca5f8c46c3215ae1779ee7736e) Change-Id: If8db765e3333cb78eb9ef0d66c2fc78a5f17f497
|
50706437d8216e41f0fea1e413cda7891324d397 |
|
14-Jun-2016 |
Matthew Gharrity <gharrma@google.com> |
Refactor GetIMTIndex This allows us to more easily maintain and experiment with interface method table indexing and hashing. Change-Id: I719920fae7490dcedcda7c1c36db225c2b8b16df
|
badee9820fcf5dca5f8c46c3215ae1779ee7736e |
|
13-May-2016 |
Nelli Kim <nelli.kim@samsung.com> |
Optimize IMT * Remove IMT for classes which do not implement interfaces * Remove IMT for array classes * Share same IMT Saved memory (measured on hammerhead): boot.art: Total number of classes: 3854 Number of affected classes: 1637 Saved memory: 409kB Chrome (excluding classes in boot.art): Total number of classes: 2409 Number of affected classes: 1259 Saved memory: 314kB Google Maps (excluding classes in boot.art): Total number of classes: 6988 Number of affected classes: 2574 Saved memory: 643kB Performance regression on benchmarks/InvokeInterface.java benchmark (measured timeCall10Interface) 1st launch: 9.6% 2nd launch: 6.8% Change-Id: If07e45390014a6ee8f3c1c4ca095b43046f0871f
|
a3549d2b93f6ab4fe42f7c137cecae51b3b5fa14 |
|
03-Jun-2016 |
Mingyao Yang <mingyao@google.com> |
Fix an issue of partial fragment deoptimization If the interpreter bridge returns to the instrumentation exit stub, we need to let the stub makes the decision whether the calling code is deoptimizeable or not since the stub knows the real return pc. Bug: 28769520 Change-Id: I262d1222e50a1ccbcb3675d05dcab414dc242a28
|
f711f2cf3c28dfe865e36f17419a16f06a0ebb5a |
|
23-May-2016 |
Mingyao Yang <mingyao@google.com> |
Partial fragment deoptimization We used to do either single frame deoptimization, or full fragment deoptimization which deoptimizes all the frames in a fragment. This change allows some methods to be not deoptimizeable, likely due to some kind of optimization. So we need another deoptimization mode that unwinds partial fragment. Deoptimizations are now generalized into either full or partial fragment. A full fragment deoptimization will deopt all frames in the fragment, and then returns from the invoke stub to enter interpreter. A partial fragment deoptimization will deopt a single frame, or all frames up to the method that's not deoptimizeable, and then jumps to the interpreter bridge. Currently code not deoptimizeable is the code in boot image since the code may not be compiled with debuggable flag. Bug: 28769520 Change-Id: I875c694791cc8ebd5121abcd92ce7b0db95aca38
|
d361afbf6677b5af99fe2a44e92ef9d6e3ad7c17 |
|
28-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Write conflict tables in image"" Added test. Bug: 27906566 This reverts commit 8e2478d23e89a7022c93ddc608dcbba7b29b91e6. (cherry picked from commit cdca476bf3394ce9d97a369e84e701b427009318) Change-Id: Iedb4ca9a28ae178fa7c2d486803fa27b402a85ed
|
946593d7c593c912684022a808fd156e17852248 |
|
27-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Write conflict tables in image" Some strange issues on angler. This reverts commit cda9386add68d94697449c6cb08b356747e55c21. (cherry picked from commit 8e2478d23e89a7022c93ddc608dcbba7b29b91e6) Change-Id: I475ca30e60691cd00b818aabbeb88e6ce3a2ae17
|
5c4b2ec16bcd779731bed1d2a0bd902dba3d5f92 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Write conflict tables in image Add image sections for runtime methods and conflict tables. This makes it that we do not need to fake up a length prefixed array for runtime methods. Reduces .art private dirty and PSS. System wide .art PSS goes from 32.5MB to 30.5MB after system boot. Business card .art private dirty goes from 588K to 504K. Increases image size by ~100K. Bug: 27906566 (cherry picked from commit cda9386add68d94697449c6cb08b356747e55c21) Change-Id: I3ce151651bf95047b0f692c185016f693ac4f820
|
dd5214db2eb81110929101ef90886bf52210b3c3 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Add support for eagerly calculating conflict tables Will be used to put them in the image by having the compiler eagerly calculate them. Enabled for debug builds (non compiler). Support for having conflict tables written in the image will come in the next CL. (cherry picked from commit 49b5cede15d69930a8c156a3aea240164ca7af80) Bug: 27906566 Change-Id: I03d1671a4b49317aaab5a741bbeaed7957cd6229
|
91288d8f03b9aab28b61a4a76e552ad7e0c15c8b |
|
28-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Write conflict tables in image"" Added test. Bug: 27906566 This reverts commit 8e2478d23e89a7022c93ddc608dcbba7b29b91e6. (cherry picked from commit cdca476bf3394ce9d97a369e84e701b427009318) Change-Id: Ia94fc7acc7ae3879921c4e8d0a02b156037ac286
|
d23d7d145c86975acbcc75505b8a323337066ac0 |
|
27-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Write conflict tables in image" Some strange issues on angler. This reverts commit cda9386add68d94697449c6cb08b356747e55c21. (cherry picked from commit 8e2478d23e89a7022c93ddc608dcbba7b29b91e6) Change-Id: Iffd25c5fb732ff72b58c787c107dc33c56f8c8d4
|
cdca476bf3394ce9d97a369e84e701b427009318 |
|
28-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Write conflict tables in image"" Added test. Bug: 27906566 This reverts commit 8e2478d23e89a7022c93ddc608dcbba7b29b91e6. Change-Id: I0894f5f7cd11af29ed9d0345b51f527fc8a41d19
|
8e2478d23e89a7022c93ddc608dcbba7b29b91e6 |
|
27-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Write conflict tables in image" Some strange issues on angler. This reverts commit cda9386add68d94697449c6cb08b356747e55c21. Change-Id: Iba3a8bac6ce40ee16d83163823356951fecb6787
|
e42888f9df4163303244070c65d5229d3e201742 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Write conflict tables in image Add image sections for runtime methods and conflict tables. This makes it that we do not need to fake up a length prefixed array for runtime methods. Reduces .art private dirty and PSS. System wide .art PSS goes from 32.5MB to 30.5MB after system boot. Business card .art private dirty goes from 588K to 504K. Increases image size by ~100K. Bug: 27906566 (cherry picked from commit cda9386add68d94697449c6cb08b356747e55c21) Change-Id: I38cbe3150c3eeb385b8cad7cf93614e3980f4162
|
7f98c9a6babe3a21d84ce1f1e1273c99975a47f5 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Add support for eagerly calculating conflict tables Will be used to put them in the image by having the compiler eagerly calculate them. Enabled for debug builds (non compiler). Support for having conflict tables written in the image will come in the next CL. Bug: 27906566 (cherry picked from commit 49b5cede15d69930a8c156a3aea240164ca7af80) Change-Id: Ia05cb31f85eacfeabe64a8caf9a0b3029114a749
|
cda9386add68d94697449c6cb08b356747e55c21 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Write conflict tables in image Add image sections for runtime methods and conflict tables. This makes it that we do not need to fake up a length prefixed array for runtime methods. Reduces .art private dirty and PSS. System wide .art PSS goes from 32.5MB to 30.5MB after system boot. Business card .art private dirty goes from 588K to 504K. Increases image size by ~100K. Bug: 27906566 Change-Id: I38cbe3150c3eeb385b8cad7cf93614e3980f4162
|
21aa4d405cbe3d4612e3f50ebb7610cc0b3503a2 |
|
25-Apr-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Make sure the referring class is in the dex cache. The method CanAccessResolvedMethod expects the referring class in the dex file is already in the dex cache, which is true during AOT, but not necessarilly during JIT. bug:28295348 (cherry picked from commit 393fdb8b4822d80bbbd6347b088e28c03a72289e) Change-Id: I9665d377070278639eb4b5a6eeced85d656e6cb6
|
393fdb8b4822d80bbbd6347b088e28c03a72289e |
|
25-Apr-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Make sure the referring class is in the dex cache. The method CanAccessResolvedMethod expects the referring class in the dex file is already in the dex cache, which is true during AOT, but not necessarilly during JIT. bug:28295348 Change-Id: I58739903f0dff3867b920a7444f53b99ecf86e85
|
49b5cede15d69930a8c156a3aea240164ca7af80 |
|
14-Apr-2016 |
Mathieu Chartier <mathieuc@google.com> |
Add support for eagerly calculating conflict tables Will be used to put them in the image by having the compiler eagerly calculate them. Enabled for debug builds (non compiler). Support for having conflict tables written in the image will come in the next CL. Bug: 27906566 Change-Id: I03d1671a4b49317aaab5a741bbeaed7957cd6229
|
01b4b3273db4a038917ce2e39a9f8850e0f9ca1f |
|
31-Mar-2016 |
Alex Light <allight@google.com> |
Make InvokeInterfaceTrampoline check methods InvokeInterfaceTrampoline was causing problems by looking into the ImtConflictTable of non-imt-conflict-methods. This makes it check for that before doing so. Bug: 27931085 (cherry picked from commit 9fc547ac3936fe88e9592f4a47afd7b134cb607c) Change-Id: I993178a371f8f46535a752e5c4d46d74777cefaf
|
9fc547ac3936fe88e9592f4a47afd7b134cb607c |
|
31-Mar-2016 |
Alex Light <allight@google.com> |
Make InvokeInterfaceTrampoline check methods InvokeInterfaceTrampoline was causing problems by looking into the ImtConflictTable of non-imt-conflict-methods. This makes it check for that before doing so. Bug: 27931085 Change-Id: I993178a371f8f46535a752e5c4d46d74777cefaf
|
61b28a17d9b6e8e998103646e98e4a9772e11927 |
|
25-Feb-2016 |
David Srbecky <dsrbecky@google.com> |
Use bit-level packing for InlineInfo in stackmaps as well. Use the same approach as we do for stackmaps to reduce the size. It saves 4.0 MB from non-debuggable boot.oat (AOSP). It does not affect debuggable boot.oat. It saves 3.6 MB (of 96.6 MB) from /system/framework/arm/ (GOOG). It saves 0.6 MB (of 26.7 MB) from /system/framework/oat/arm/ (GOOG). Field loads from inline-info get around 5% slower. (based on the time it takes to load all inline-infos from boot.oat) Change-Id: I67b0fa5eef74c1fdb013680d0231fd44ea696176
|
09ed09866da6d8c7448ef297c148bfa577a247c2 |
|
12-Feb-2016 |
David Srbecky <dsrbecky@google.com> |
Pack stack map entries on bit level to save space. Use only the minimum number of bits required to store stack map data. For example, if native_pc needs 5 bits and dex_pc needs 3 bits, they will share the first byte of the stack map entry. The header is changed to store bit offsets of the fields rather than byte sizes. Offsets also make it easier to access later fields without calculating sum of all previous sizes. All of the header fields are byte sized or encoded as ULEB128 instead of the previous fixed size encoding. This shrinks it by about half. It saves 3.6 MB from non-debuggable boot.oat (AOSP). It saves 3.1 MB from debuggable boot.oat (AOSP). It saves 2.8 MB (of 99.4 MB) from /system/framework/arm/ (GOOG). It saves 1.0 MB (of 27.8 MB) from /system/framework/oat/arm/ (GOOG). Field loads from stackmaps seem to get around 10% faster. (based on the time it takes to load all stackmap entries from boot.oat) Bug: 27640410 Change-Id: I8bf0996b4eb24300c1b0dfc6e9d99fe85d04a1b7
|
796d63050a18f263b93ea34951a61deaecab3422 |
|
13-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Add an ImtConflictTable to better resolve IMT conflicts. - Attach a ImtConflictTable to conflict runtime ArtMethod. - Initially 0, a new one will be created at the first hit of the conflict method. - If the assembly code does not find a target method in the table, we will create a new one again, copying the data from the previous table and adding the new mapping. Implemented for arm/arm64/x86/x64. bug:27556801 bug:24769046 Change-Id: Ie74d1c77cf73d451a1142bdc5e3683f9f84bb4e7
|
5457b86f9dc02045436cc53327c4b6383805cb6a |
|
17-Mar-2016 |
Alex Light <allight@google.com> |
Revert "Revert "Fix issue with proxy invocation on default methods"" This reverts commit daf58c80d42f024aae0cb94ebd2c0bd61ebbf240. Bug: 27621360 (cherry picked from commit e9dd04f633fcffc485f8d74861f39f66fc8bc522) Change-Id: I56fccf19ae80451be4c316ba14911c667cbe9e47
|
e9dd04f633fcffc485f8d74861f39f66fc8bc522 |
|
17-Mar-2016 |
Alex Light <allight@google.com> |
Revert "Revert "Fix issue with proxy invocation on default methods"" This reverts commit daf58c80d42f024aae0cb94ebd2c0bd61ebbf240. Bug: 27621360 Change-Id: I56fccf19ae80451be4c316ba14911c667cbe9e47
|
fedd91d50930e160c021d65b3740264f6ffec260 |
|
07-Jan-2016 |
Alex Light <allight@google.com> |
Optimizing compiler support for directly calling interface methods This teaches the optimizing compiler how to perform invoke-super on interfaces. This should make the invokes generally faster. Bug: 24618811 Change-Id: I7f9b0fb1209775c1c8837ab5d21f8acba3cc72a5
|
f39745e663f8f2634fc8858e427b77da98f8f2b4 |
|
26-Jan-2016 |
Vladimir Marko <vmarko@google.com> |
ART: Remove some unnecessary mutator lock annotations. The StackReference<> pointer held by a Handle<> can be used without holding the mutator lock. We already do that when we copy Handle<>s around. Only accessing the actual content of the pointed-to StackReference<> needs to be done while holding the mutator lock. Change-Id: I5f93bd7e277383192f1f16dff6883ecb26387414
|
42ef8ab151a3d0cbb42cb43f6841c3708d65fca3 |
|
04-Dec-2015 |
Andreas Gampe <agampe@google.com> |
ART: Stash a resolved method late in the verifier Invoke-interface should only be called on an interface method. We cannot move the check earlier, as there are other checks that must be done that can fail a class hard. So postpone a push to the dex cache. Clean up the test a bit. Also templatize ResolveMethod with a version always checking the invoke type, and on a cache miss check whether type target type is an interface when an interface invoke type was given. Bug: 21869691 Change-Id: I94cbb23339cbbb3cb6be9995775e4dcefacce7fd
|
c96205e03bd4f991ad1540df38f9f692ef211b22 |
|
10-Dec-2015 |
Andreas Gampe <agampe@google.com> |
Revert "ART: Check invoke-interface earlier in verifier" This reverts commit dae24142127c64551142a50423085aabdb0a6060. It is important to check the name of the method being called. Bug: 21869691
|
dae24142127c64551142a50423085aabdb0a6060 |
|
04-Dec-2015 |
Andreas Gampe <agampe@google.com> |
ART: Check invoke-interface earlier in verifier Invoke-interface should only be called on an interface method. Move the check earlier, as otherwise we'll try to resolve and potentially inject a method into the dex cache. Also templatize ResolveMethod with a version always checking the invoke type, and on a cache miss check whether type target type is an interface when an interface invoke type was given. Bug: 21869691 Change-Id: Ica27158f675b5aa223d9229248189612f4706832
|
73be1e8f8609708f6624bb297c9628de44fd8b6f |
|
17-Sep-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Inline monomorphic calls. Change-Id: If38171c2dc7d4a4378df5d050afc4fff4499c98f
|
e523423a053af5cb55837f07ceae9ff2fd581712 |
|
02-Dec-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Don't use the compiler driver for method resolution."" This reverts commit c88ef3a10c474045a3476a02ae75d07ddd3230b7. Change-Id: I0ed88a48b313a8d28bc39fae40631123aadb13ef
|
a7a4759946d9f11c88dc108b2b6a9518ce9c1e18 |
|
24-Nov-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "lambda: Add support for invoke-interface for boxed innate lambdas" 955-lambda is flaky Bug: 24618608 Bug: 25107649 This reverts commit 457e874459ae638145cab6d572e34d48480e39d2. (cherry picked from commit 3a0909248e04b22c3981cbf617bc2502ed5b6380) Change-Id: I24884344d21d7a4262e53e3f5dba57032687ddb7
|
3a0909248e04b22c3981cbf617bc2502ed5b6380 |
|
24-Nov-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "lambda: Add support for invoke-interface for boxed innate lambdas" 955-lambda is flaky Bug: 24618608 Bug: 25107649 This reverts commit 457e874459ae638145cab6d572e34d48480e39d2. Change-Id: I24884344d21d7a4262e53e3f5dba57032687ddb7
|
457e874459ae638145cab6d572e34d48480e39d2 |
|
23-Oct-2015 |
Igor Murashkin <iam@google.com> |
lambda: Add support for invoke-interface for boxed innate lambdas Lambda closures created with the 'create-lambda' instruction (termed "innate lambdas") can be turned into an object with 'box-lambda'. This CL enables support for those kinds of lambdas to work with 'invoke-interface' by generating a proxy class for the lambda. Note: MIPS32/64 support not included. Bug: 24618608 Bug: 25107649 Change-Id: Ic8f1bb66ebeaed4097e758a50becf1cff6ccaefb
|
9139e008abe30b7beaf4afd6533228a1dd9b202c |
|
10-Oct-2015 |
Alex Light <allight@google.com> |
Correct exception behavior for default methods Default methods are defined to throw an IncompatibleClassChangeError (ICCE) when they are called and there is no "best" implementation. Previously we would simply throw an ICCE during class loading as soon as we noticed that this would happen if called. This makes us wait until we actually attempt to execute the method. Furthermore, this allows us to use other, non-conflicting, methods on the object as normal. Furthermore, this makes us correctly throw AbstractMethodErrors in cases where all default implementations of a method are overridden by abstract declarations. Adds 3 tests for this new behavior. Bug: 24618811 Change-Id: Id891958a81f9b3862b2ce5919636aabef7d3422e
|
524e7ea8cd17bad17bd9f3e0ccbb19ad0d4d9c02 |
|
16-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Remove ArtCode. - Instead use OatQuickMethodHeader. - Various cleanups now that we don't have all those ArtMethod -> ArtCode -> OatQuickMethodHeader indirections. As a consequence of this cleanup, exception handling got a bit faster. ParserCombinators benchmark (exception intensive) on x64: (lower is better) Before: ParserCombinators(RunTime): 1062500.0 us. After: ParserCombinators(RunTime): 833000.0 us. Change-Id: Idac917b6f1b0dc254ad68fb3781cd61bccadb0f3
|
4b8f1ecd3aa5a29ec1463ff88fee9db365f257dc |
|
26-Aug-2015 |
Roland Levillain <rpl@google.com> |
Use ATTRIBUTE_UNUSED more. Use it in lieu of UNUSED(), which had some incorrect uses. Change-Id: If247dce58b72056f6eea84968e7196f0b5bef4da
|
6bc4374e3fa00e3ee5e832e1761c43e0b8a71558 |
|
12-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Add an abstraction over a compiled code. That's just step 1, moving code-related functions of ArtMethod to another class. That class is only a wrapper on an ArtMethod, but will be changed to be a wrapper around compiled code. Change-Id: I6f35fc06d37220558dff61691e51ae20066b0dd6
|
03ec930faded5bbfa096533ce60b6893847922db |
|
28-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Lock counting in the interpreter To support structured locking when balanced-locking verification failed, count lock and unlock operations in the verifier. Bug: 23502994 Change-Id: I2bb915da6e3d43c49723a943b42d4d5a7c939aa1
|
a23b4680a8565f28e8aa958febf8949db74a3064 |
|
29-Sep-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Fix a mutator lock violation in the generic JNI end sequence. artQuickGenericJniEndTrampoline() was accessing objects without a shared mutator lock right after returning from a JNI call but before switching to the runnable state. This fixes crashes with table lookup read barriers enabled. Bug: 12687968 Change-Id: I94ad9ca276750f58cb68b2fa9eb8cdeb371f021b
|
639bdd13993644a267f177f8f5936496bda65e2b |
|
03-Jun-2015 |
Andreas Gampe <agampe@google.com> |
ART: Single-frame deopt Add deoptimization of a single frame. Works by removing the managed code frame and jumping into the quick-to-interpreter bridge, and the bridge understanding a stored ShadowFrame. We need a separate fixup pass. For x86, we leave the return address on the stack so we don't need to push it there. Bug: 21611912 Change-Id: I06625685ced8b054244f8685ab50b238a705b9d2
|
b30259251b22430fad12f1adeab671e4bf8f88f5 |
|
01-Sep-2015 |
Andreas Gampe <agampe@google.com> |
ART: Use unique_ptr for alloca-ed ShadowFrames To enable automated calls of the destructor (for extensions of ShadowFrame), return a unique_ptr with a custom deleter. Use a macro so that the alloca happens in the caller. Change-Id: Id28a6ea131f108e4a94ff1699fc22e7b44aec018
|
05792b98980741111b4d0a24d68cff2a8e070a3a |
|
03-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Move DexCache arrays to native. This CL has a companion CL in libcore/ https://android-review.googlesource.com/162985 Change-Id: Icbc9e20ad1b565e603195b12714762bb446515fa
|
0747466fca310eedea5fc49e37d54f240a0b3c0f |
|
25-Aug-2015 |
Sebastien Hertz <shertz@google.com> |
Revert "Revert "Fix deoptimization with pending exception"" This reverts commit 6e2d5747d00697a25251d25dd33b953e54709507. Fixes the deoptimization path from compiled code (generated by the Optimizing compiler) by adding wrapper artDeoptimizeFromCompiledCode. This wrapper, called through the matching assembler stub art_quick_deoptimize_from_compiled_code, pushes the deoptimization context just before deoptimizing the stack. Bug: 23371176 Bug: 19944235 Change-Id: Ia7082656998aebdd0157438f7e6504c120e10d3e
|
ff73498a5539d87424a964265e43765e788aec44 |
|
24-Aug-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
Revert "Revert "[MIPS] Use hard float calling convention for managed code"" This reverts commit 7fee84c087e0f903e7d43bef180df047db1c8051. Fixed issue with temporary registers on Mips32r6. Change-Id: I93018927e6a6036cff2d55e6cda66d3212a4316b
|
6e2d5747d00697a25251d25dd33b953e54709507 |
|
25-Aug-2015 |
Sebastien Hertz <shertz@google.com> |
Revert "Fix deoptimization with pending exception" This reverts commit 54b62480636ae846d705fc180c7bd6cd08ec1e42. This is causing test failures with Optimizing compiler. Bug: 23371176 Bug: 19944235 Change-Id: Ie3ffbcf2b6d2ca8bc93cb008a4e29a7567d04a7c
|
54b62480636ae846d705fc180c7bd6cd08ec1e42 |
|
20-Aug-2015 |
Sebastien Hertz <shertz@google.com> |
Fix deoptimization with pending exception When deoptimizing the stack, we set a fake exception in the current Thread* (see method Thread::GetDeoptimizationException). On the next exception check, the QuickExceptionHandler will deoptimize the stack. The issue is when we deoptimize while an exception is already pending in the current Thread*: setting the fake exception will clobber the pending exception which is not correct. This happens in the artQuickToInterpreterBridge when returning from the interpreter and we want to deoptimize the stack for debugging (like single-stepping). This CL saves the pending exception before asking for deoptimization. Then the exception is restored just before executing the deoptimized frames with the interpreter. Also cleans up the way we save deoptimization context (return value and pending exception). Bug: 23371176 Bug: 19944235 Change-Id: I7f4c8347b328817c452beda3399e210eba3a88a4
|
7fee84c087e0f903e7d43bef180df047db1c8051 |
|
21-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "[MIPS] Use hard float calling convention for managed code" MipsMir2Lir::LockCallTemps() is broken for secondary architecture on aosp_mips64-eng. This reverts commit a29449dcf57c57fe0876f51367985477317cc557. Change-Id: I480ea7569d73aea7894fc0a6dd804b1135286a37
|
a29449dcf57c57fe0876f51367985477317cc557 |
|
22-Jul-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
[MIPS] Use hard float calling convention for managed code Note that this isn't o32 ABI. Same set of registers is used for arguments ($a0-$a3 and $f12-$f15), but we don't skip registers and fp arguments are never passed via core registers. Change-Id: Ifb883ff6e15758b539137898b49ac2f8ee075f49
|
3a35714ebca10c989aa383c0861e2e84fe8dadf8 |
|
08-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Clean up unnecessary ArtMethod** ArtMethods are no longer Java objects, so the additional indirection is no longer necessary here. Change-Id: If76756d875b418b3f6e83f51b3225a158e9ce29b
|
90443477f9a0061581c420775ce3b7eeae7468bc |
|
17-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move to newer clang annotations Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
|
ef484d442a3dcae2cd1842c5be0623f5cf71e4ab |
|
18-May-2015 |
Mingyao Yang <mingyao@google.com> |
Fix nested deoptimization. Handle nested deoptimization cases. Create a stacked shadow frame records to keep track of deoptimization shadow frames. Shadow frames under construction can be tracked in the same stack. Bug: 20845490 (cherry picked from commit 1f2d3ba6af52cf6f566deb38b7e07735c9a08fb6) Change-Id: I768285792c29e7c3cfcd21e7a2600802506024d8
|
1f2d3ba6af52cf6f566deb38b7e07735c9a08fb6 |
|
18-May-2015 |
Mingyao Yang <mingyao@google.com> |
Fix nested deoptimization. Handle nested deoptimization cases. Create a stacked shadow frame records to keep track of deoptimization shadow frames. Shadow frames under construction can be tracked in the same stack. Bug: 20845490 Change-Id: I768285792c29e7c3cfcd21e7a2600802506024d8
|
f677ebfd832c9c614fea5e6735725fec2f7a3f2a |
|
29-May-2015 |
David Brazdil <dbrazdil@google.com> |
Cache stack map encoding Operations on CodeInfo and StackMap objects repeatedly read encoding information from the MemoryRegion. Since these are 3-bit-loads of values that never change, caching them can measurably reduce compile times. According to benchmarks, this patch saves 1-3% on armv7, 2-4% on x86, and 0-1% on x64. Change-Id: I46b197513601325d8bab562cc80100c00ec28a3b
|
3d21bdf8894e780d349c481e5c9e29fe1556051c |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ArtMethod to native Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 (cherry picked from commit e401d146407d61eeb99f8d6176b2ac13c4df1e33) Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d Fix some ArtMethod related bugs Added root visiting for runtime methods, not currently required since the GcRoots in these methods are null. Added missing GetInterfaceMethodIfProxy in GetMethodLine, fixes --trace run-tests 005, 044. Fixed optimizing compiler bug where we used a normal stack location instead of double on ARM64, this fixes the debuggable tests. TODO: Fix JDWP tests. Bug: 19264997 Change-Id: I7c55f69c61d1b45351fd0dc7185ffe5efad82bd3 ART: Fix casts for 64-bit pointers on 32-bit compiler. Bug: 19264997 Change-Id: Ief45cdd4bae5a43fc8bfdfa7cf744e2c57529457 Fix JDWP tests after ArtMethod change Fixes Throwable::GetStackDepth for exception event detection after internal stack trace representation change. Adds missing ArtMethod::GetInterfaceMethodIfProxy call in case of proxy method. Bug: 19264997 Change-Id: I363e293796848c3ec491c963813f62d868da44d2 Fix accidental IMT and root marking regression Was always using the conflict trampoline. Also included fix for regression in GC time caused by extra roots. Most of the regression was IMT. Fixed bug in DumpGcPerformanceInfo where we would get SIGABRT due to detached thread. EvaluateAndApplyChanges: From ~2500 -> ~1980 GC time: 8.2s -> 7.2s due to 1s less of MarkConcurrentRoots Bug: 19264997 Change-Id: I4333e80a8268c2ed1284f87f25b9f113d4f2c7e0 Fix bogus image test assert Previously we were comparing the size of the non moving space to size of the image file. Now we properly compare the size of the image space against the size of the image file. Bug: 19264997 Change-Id: I7359f1f73ae3df60c5147245935a24431c04808a [MIPS64] Fix art_quick_invoke_stub argument offsets. ArtMethod reference's size got bigger, so we need to move other args and leave enough space for ArtMethod* and 'this' pointer. This fixes mips64 boot. Bug: 19264997 Change-Id: I47198d5f39a4caab30b3b77479d5eedaad5006ab
|
4edd8476339fd93ba8ff384ad107f1fc662e64a3 |
|
01-Jun-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix accidental IMT and root marking regression Was always using the conflict trampoline. Also included fix for regression in GC time caused by extra roots. Most of the regression was IMT. Fixed bug in DumpGcPerformanceInfo where we would get SIGABRT due to detached thread. EvaluateAndApplyChanges: From ~2500 -> ~1980 GC time: 8.2s -> 7.2s due to 1s less of MarkConcurrentRoots Bug: 19264997 Change-Id: I4333e80a8268c2ed1284f87f25b9f113d4f2c7e0
|
e401d146407d61eeb99f8d6176b2ac13c4df1e33 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ArtMethod to native Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
|
d23eeef3492b53102eb8093524cf37e2b4c296db |
|
18-May-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Support for inlining methods that call/throw. Mostly fixes here and there to make it working. Change-Id: I1b535e895105d78b65634636d675b818551f783e
|
3b45ef277e4a5f7e0314d5df7ef82e480156ba75 |
|
27-May-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix VerifyObject runtime verification Update some bit-rotted code to work again. Most tests now work, for some the verification overhead results in a timeout. Change-Id: Ieab4f2de474a05e915e24abc93da3c2eeed996eb
|
8ea18d0f066f63fa4e5d154f14327468bf288e2b |
|
26-May-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Pass the dex method index directly to interface trampoline. This avoids computing the dex pc and re-finding the method index again. I have kept the code for kDebugBuild. Change-Id: Icd60e0deade755e32b54021c0875b1af592b8c3e
|
9bd88b0933a372e6a7b64b850868e6a7998567e2 |
|
22-Apr-2015 |
Serban Constantinescu <serban.constantinescu@linaro.org> |
ARM64: Move xSELF from x18 to x19. This patch moves xSELF to callee saved x19 and removes support for ETR (external thread register), previously used across native calls. Change-Id: Icee07fbb9292425947f7de33d10a0ddf98c7899b Signed-off-by: Serban Constantinescu <serban.constantinescu@linaro.org>
|
7ea6a170486d81b127e69673cd1020c4db628c93 |
|
19-May-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Don't hardcode the location of the caller. This is to avoid shooting ourselves in the foot when dealing with inlined frames. Instead, use common methods for fetching the caller and its dex pc. Change-Id: I3467a7b50cf163022d332e80356f0aab747de252
|
fc58af45e342ba9e18bbdf597f205a58ec731658 |
|
17-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add AbstractMethod, Constructor, Method Moves functionality to ART from libcore. Precursor to moving ArtMethods to native. Mostly performance improvements. N5 perf before (irrelevant results removed): Class_getConstructor 962.87 =========== Class_getDeclaredMethod 2394.37 ============================ Class_getMethod 2509.20 ============================== Class_newInstance 1999.81 ======================= Method_invokeI 1439.02 ================= Method_invokePreBoxedI 1415.82 ================ Method_invokeStaticI 1456.24 ================= Method_invokeStaticPreBoxedI 1427.32 ================= Method_invokeStaticV 814.47 ========= Method_invokeV 816.56 ========= After: benchmark ns linear runtime Class_getConstructor 1302.04 ================ Class_getDeclaredMethod 1459.01 ================== Class_getMethod 1560.40 =================== Class_newInstance 2029.94 ========================= Method_invokeI 1312.89 ================ Method_invokePreBoxedI 1255.01 =============== Method_invokeStaticI 1289.13 =============== Method_invokeStaticPreBoxedI 1196.52 ============== Method_invokeStaticV 790.82 ========= Method_invokeV 791.73 ========= Performance improvements are more than just fixing regressions introduced in: http://android-review.googlesource.com/#/c/146069/ Bug: 19264997 Change-Id: Ife79c469fdb09f30e3aefcfc3e0ce5ed32303fce
|
69a503050fb8a7b3a79b2cd2cdc2d8fbc594575d |
|
14-Apr-2015 |
Zheng Xu <zheng.xu@arm.com> |
ARM64: Remove suspend register. It also clean up build/remove frame used by JNI compiler and generates stp/ldp instead of str/ldr. Also x19 has been unblocked in both quick and optimizing compiler. Change-Id: Idbeac0942265f493266b2ef9b7a65bb4054f0e2d
|
da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8 |
|
24-Mar-2015 |
Roland Levillain <rpl@google.com> |
Unify ART's various implementations of bit_cast. ART had several implementations of art::bit_cast: 1. one in runtime/base/casts.h, declared as: template <class Dest, class Source> inline Dest bit_cast(const Source& source); 2. another one in runtime/utils.h, declared as: template<typename U, typename V> static inline V bit_cast(U in); 3. and a third local version, in runtime/memory_region.h, similar to the previous one: template<typename Source, typename Destination> static Destination MemoryRegion::local_bit_cast(Source in); This CL removes versions 2. and 3. and changes their callers to use 1. instead. That version was chosen over the others as: - it was the oldest one in the code base; and - its syntax was closer to the standard C++ cast operators, as it supports the following use: bit_cast<Destination>(source) since `Source' can be deduced from `source'. Change-Id: I7334fd5d55bf0b8a0c52cb33cfbae6894ff83633
|
eb07669e9784ccb41d75df180727e57fc4520e28 |
|
22-Aug-2014 |
Daniel Mihalyi <daniel.mihalyi@mattakis.com> |
JDWP: Optimized single step during debugging For single stepping full deoptimization and undeoptimizations were performed with significant overhead, because every code will be executed in interpreted mode during a single step, even if it is not strictly required. For example, if we have a computation heavy method call and we would like to step over it, that method (and all the methods called from it) will run in interpreter mode. This can take so long in some cases (e.g. multiple minutes) that it makes debugging process unusable. The solution for this limitation is not using full deoptimizations for single steps and force interpreter only for those methods that we are about to step into, and require stack deoptimization before step outs. Bug: 17750566 Bug: 18094282 Bug: https://code.google.com/p/android/issues/detail?id=77984 Change-Id: I683c52465883146c4c84ec47bf96f8efd920527f Signed-off-by: Daniel Mihalyi <daniel.mihalyi@mattakis.com>
|
6ea651f0f4c7de4580beb2e887d86802c1ae0738 |
|
24-Feb-2015 |
Maja Gagic <maja.gagic@imgtec.com> |
Initial support for quick compiler on MIPS64r6. Change-Id: I6f43027b84e4a98ea320cddb972d9cf39bf7c4f8
|
d18e083522e8148427c08a35034c10f63f61f31d |
|
10-Feb-2015 |
Douglas Leung <douglas.leung@imgtec.com> |
Fix a compilation error for Mips64. Change-Id: I4f35750c4b840fce18c467995787e92bc38a7812
|
3e6a3bf797e49b7f449256455c7e522e888687d8 |
|
19-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Change x86 long param ABI (Quick/JNI/Opt) Ensure that we don't pass a long parameter across the last register and the stack: skip the register and allocate it only on the stack. This was requested to simplify the optimizing compiler code generation for x86. Optimizing (Baseline) compiler support for x86 longs: - Remove QuickParameter from Location, as there are no longer any uses of it. Bump oat.h version because we changed an ABI again. I changed IsParamALong() to return false for argument 0 (this argument). I am not sure why it differed from all other tests. I have not tested on ARM. I followed Nicolas's suggestions for setting the value of kSplitPairAcrossRegisterAndStack for different architectures. Change-Id: I2f16b33c1dac58dd4f4f503e9c2309d845f5fb7a Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
|
72d72ef51aef106d6f0300a72b583bcc5cd90a13 |
|
28-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Force set resolved method for static invokes For static invokes, we may dispatch to the static method in the superclass but resolve using the subclass. To prevent getting slow paths on each invoke, we force set the resolved method for the super class dex method index if we are in the same dex file. Added test. Bug: 19175856 (cherry picked from commit e4a91bbeaa118bc01a5c338c6a6d9ee094a6a2c6) Change-Id: I26f8644a7f725f5c2dc2a94a8e9578f573792507
|
e4a91bbeaa118bc01a5c338c6a6d9ee094a6a2c6 |
|
28-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Force set resolved method for static invokes For static invokes, we may dispatch to the static method in the superclass but resolve using the subclass. To prevent getting slow paths on each invoke, we force set the resolved method for the super class dex method index if we are in the same dex file. Added test. Bug: 19175856 Change-Id: I26f8644a7f725f5c2dc2a94a8e9578f573792507
|
966c3ae95d3c699ee9fbdbccc1acdaaf02325faf |
|
27-Jan-2015 |
Mark P Mendell <mark.p.mendell@intel.com> |
Revert "Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)"" This reverts commit 949c91fb91f40a4a80b2b492913cf8541008975e. This time, don't clobber EBX before saving it. Redo some of the macros to make register usage explicit. Change-Id: I8db8662877cd006816e16a28f42444ab7c36bfef
|
949c91fb91f40a4a80b2b492913cf8541008975e |
|
27-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)" And the 3 Mac build fixes. Fix conflicts in context_x86.* . This reverts commits 3d2c8e74c27efee58e24ec31441124f3f21384b9 , 34eda1dd66b92a361797c63d57fa19e83c08a1b4 , f601d1954348b71186fa160a0ae6a1f4f1c5aee6 , bc503348a1da573488503cc2819c9e30807bea31 . Bug: 19150481 Change-Id: I6650ee30a7d261159380fe2119e14379e4dc9970
|
3d2c8e74c27efee58e24ec31441124f3f21384b9 |
|
13-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Implement X86 hard float (Quick/JNI/Baseline) Use XMM0-XMM3 as parameter registers for float/double on X86. X86_64 already uses XMM0-XMM7 for parameters. Change the 'hidden' argument register from XMM0 to XMM7 to avoid a conflict. Add support for FPR save/restore in runtime/arch/x86. Minimal support for Optimizing baseline compiler. Bump the version in runtime/oat.h because this is an ABI change. Change-Id: Ia6fe150e8488b9e582b0178c0dda65fc81d5a8ba Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
|
1a5c40672783fac98aca5a04ac798a0a0014de65 |
|
15-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Mips64 runtime support Interpret-only Mips64 runtime support. Change-Id: Iee22d0c8c77105d9b2f03a67dc4e09957fe0ab0a
|
69c15d340e7e76821bbc5d4494d4cef383774dee |
|
13-Jan-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Skip r1 on arm if first parameter is a long. Change-Id: I16d927ee0a0b55031ade4c92c0095fd74e18ed5b
|
c6d86725521841637bdd9564e71be3d9691db20f |
|
11-Dec-2014 |
Douglas Leung <douglas.leung@imgtec.com> |
Fix refs_and_args callee save order for Mips32. This patch fixes an ART crash while using the soft keyboard. Change-Id: Ib2d651c460ce2707356986cd733bed23b0cabb21
|
0f9b03c65e0ee8bdc5ddf58af100f5fc356cc98b |
|
12-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "ART: Implement hard float for X86" This reverts commit 59b9cf7ec0ccc13df91be0bd5c723b8c52410739. Change-Id: I08333b528032480def474286dc368d916a07e17f
|
59b9cf7ec0ccc13df91be0bd5c723b8c52410739 |
|
09-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Implement hard float for X86 Use XMM0-XMM3 as parameter registers for float/double on X86. X86_64 already uses XMM0-XMM7 for parameters. Change the 'hidden' argument register from XMM0 to XMM7 to avoid a conflict. This change was requested to simplify the Optimizing compiler implementation. Change-Id: I89ba8ade99b9a8a5b1ad1ee5f5cbfd33d656bfaa Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
|
425f239c291d435f519a1cf4bdd9ccc9a2c0c070 |
|
08-Jan-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix handling of long argument spanning register/memory. Comment in arm_lir.h says: * If a 64-bit argument would span the register/memory argument * boundary, it will instead be fully passed in the frame. This change implements such logic for all platforms. We still need to pass the low part in register as well because I haven't ported the jni compilers (x86 and mips) to it. Once the jni compilers are updated, we can remove the register assignment. Note that this greatly simplifies optimizing's register allocator by not having to understand a long spanning register and memory. Change-Id: I59706ca5d47269fc46e5489ac99bd6576e87e7f3
|
fcfc8a70894be642dae08350361d04c14a6d7be5 |
|
25-Nov-2014 |
Sebastien Hertz <shertz@google.com> |
Support proxy method in StackVisitor::GetThisObject Adds function artQuickGetProxyThisObject which returns the 'this' object of the proxy method using the QuickArgumentVisitor. Since proxy methods have the same layout than the kRefsAndArgs runtime method and 'this' is the 1st method argument, it is located in the first GPR. Bug: 17965861 (cherry picked from commit a836bc9760419af4a515f96c66100a39e865f3b9) Change-Id: I09b5c1cdfc051d9395bba929d4650804eb3b1f7f
|
a836bc9760419af4a515f96c66100a39e865f3b9 |
|
25-Nov-2014 |
Sebastien Hertz <shertz@google.com> |
Support proxy method in StackVisitor::GetThisObject Adds function artQuickGetProxyThisObject which returns the 'this' object of the proxy method using the QuickArgumentVisitor. Since proxy methods have the same layout than the kRefsAndArgs runtime method and 'this' is the 1st method argument, it is located in the first GPR. Bug: 17965861 Change-Id: Ic6ef6c83b9a549c25f9929d5e00ffe1d3a9a36f0
|
00f1527007381a0cbf1a2b36b956cb3ddac906cb |
|
03-Dec-2014 |
Ian Rogers <irogers@google.com> |
Fix artQuickResolutionTrampoline. Mistakenly updating dex method index of the non-receiver method. Change-Id: I42296e344a53e001bf37414852cd9f23f629ca40
|
e0a02dabedd7db2c511a513fb48d7e39ed3dd9c0 |
|
02-Dec-2014 |
Ian Rogers <irogers@google.com> |
Move FindDexMethodIndexInOtherDexFile into ArtMethod. Move FindDexMethodIndexInOtherDexFile out of MethodHelper into ArtMethod in preparation for the removal of MethodHelper. Tidy ClassLinker::ResolveMethod so that all exception paths flow through the exception pending assertion. Tidy artQuickResolutionTrampoline to be more explicit about variable names and only update the dex cache if necessary. Change-Id: I3e48eb4f6c1291533067c1b53efe90c53bfcaea8
|
e94652f1e321b2c8b71acbe5b07d2ebf69fbdb99 |
|
02-Dec-2014 |
Ian Rogers <irogers@google.com> |
Remove MethodHelper from the interpreter. Use ShadowFrame to get the executing method to avoid a handle for the current method. Various associated bits of header file clean-up and removal of an unnecessary use of MethodHelper in CompilerDriver. Change-Id: I3b6f4413701e8fc6b0c58b0041a0dd15472bedaa
|
2d7210188805292e463be4bcf7a133b654d7e0ea |
|
10-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change 64 bit ArtMethod fields to be pointer sized Changed the 64 bit entrypoint and gc map fields in ArtMethod to be pointer sized. This saves a large amount of memory on 32 bit systems. Reduces ArtMethod size by 16 bytes on 32 bit. Total number of ArtMethod on low memory mako: 169957 Image size: 49203 methods -> 787248 image size reduction. Zygote space size: 1070 methods -> 17120 size reduction. App methods: ~120k -> 2 MB savings. Savings per app on low memory mako: 125K+ per app (less active apps -> more image methods per app). Savings depend on how often the shared methods are on dirty pages vs shared. TODO in another CL, delete gc map field from ArtMethod since we should be able to get it from the Oat method header. Bug: 17643507 Change-Id: Ie9508f05907a9f693882d4d32a564460bf273ee8 (cherry picked from commit e832e64a7e82d7f72aedbd7d798fb929d458ee8f)
|
e832e64a7e82d7f72aedbd7d798fb929d458ee8f |
|
10-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change 64 bit ArtMethod fields to be pointer sized Changed the 64 bit entrypoint and gc map fields in ArtMethod to be pointer sized. This saves a large amount of memory on 32 bit systems. Reduces ArtMethod size by 16 bytes on 32 bit. Total number of ArtMethod on low memory mako: 169957 Image size: 49203 methods -> 787248 image size reduction. Zygote space size: 1070 methods -> 17120 size reduction. App methods: ~120k -> 2 MB savings. Savings per app on low memory mako: 125K+ per app (less active apps -> more image methods per app). Savings depend on how often the shared methods are on dirty pages vs shared. TODO in another CL, delete gc map field from ArtMethod since we should be able to get it from the Oat method header. Bug: 17643507 Change-Id: Ie9508f05907a9f693882d4d32a564460bf273ee8
|
d582fa4ea62083a7598dded5b82dc2198b3daac7 |
|
06-Nov-2014 |
Ian Rogers <irogers@google.com> |
Instruction set features for ARM64, MIPS and X86. Also, refactor how feature strings are handled so they are additive or subtractive. Make MIPS have features for FPU 32-bit and MIPS v2. Use in the quick compiler rather than #ifdefs that wouldn't have worked in cross-compilation. Add SIMD features for x86/x86-64 proposed in: https://android-review.googlesource.com/#/c/112370/ Bug: 18056890 Change-Id: Ic88ff84a714926bd277beb74a430c5c7d5ed7666
|
277ccbd200ea43590dfc06a93ae184a765327ad0 |
|
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: More warnings Enable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general, and -Wunused-but-set-parameter for GCC builds. Change-Id: I81bbdd762213444673c65d85edae594a523836e5
|
575e78c41ece0dec969d31f46be563d4eb7ae43b |
|
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: Replace COMPILE_ASSERT with static_assert (runtime) Replace all occurrences of COMPILE_ASSERT in the runtime tree. Change-Id: I01e420899c760094fb342cc6cb9e692dd670a0b2
|
6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f |
|
31-Oct-2014 |
Ian Rogers <irogers@google.com> |
Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags. Fix associated errors about unused paramenters and implict sign conversions. For sign conversion this was largely in the area of enums, so add ostream operators for the effected enums and fix tools/generate-operator-out.py. Tidy arena allocation code and arena allocated data types, rather than fixing new and delete operators. Remove dead code. Change-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b
|
735b8559d6dd26c610d4b97d72f25a092d9c8947 |
|
31-Oct-2014 |
Douglas Leung <douglas.leung@imgtec.com> |
Add JNI trampoline for mips32. This patch allows the browser to come up. Change-Id: Icad9da868be76d6a08e615807fad8678ac0a110f
|
5667fdbb6e441dee7534ade18b628ed396daf593 |
|
23-Oct-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: Use hardfp calling convention between java to java call. This patch default to use hardfp calling convention. Softfp can be enabled by setting kArm32QuickCodeUseSoftFloat to true. We get about -1 ~ +5% performance improvement with different benchmark tests. Hopefully, we should be able to get more performance by address the left TODOs, as some part of the code takes the original assumption which is not optimal. DONE: 1. Interpreter to quick code 2. Quick code to interpreter 3. Transition assembly and callee-saves 4. Trampoline(generic jni, resolution, invoke with access check and etc.) 5. Pass fp arg reg following aapcs(gpr and stack do not follow aapcs) 6. Quick helper assembly routines to handle ABI differences 7. Quick code method entry 8. Quick code method invocation 9. JNI compiler TODO: 10. Rework ArgMap, FlushIn, GenDalvikArgs and affected common code. 11. Rework CallRuntimeHelperXXX(). Change-Id: I9965d8a007f4829f2560b63bcbbde271bdcf6ec2
|
2c4257be8191c5eefde744e8965fcefc80a0a97d |
|
24-Oct-2014 |
Ian Rogers <irogers@google.com> |
Tidy logging code not using UNIMPLEMENTED. Change-Id: I7a79c1671a6ff8b2040887133b3e0925ef9a3cfe
|
1428dce77b8b0e8ec3e3665d816678df1253fc10 |
|
22-Oct-2014 |
Ian Rogers <irogers@google.com> |
Const-ify functions/variables in trampoline entrypoints. Change-Id: I777600c7362ab3c1dd65a695e36a4633b43033fe
|
1d8cdbc5202378a5f1a4b3a1fba610675ed4dcd5 |
|
23-Sep-2014 |
Ian Rogers <irogers@google.com> |
Refactor quick entrypoints Remove FinishCalleeSaveFrameSetup. Assembly routines write down anchor into TLS as well as placing runtime method in callee save frame. Simplify artSet64InstanceFromCode by not computing the referrer from the stack in the C++ code. Move assembly offset tests next to constant declaration and tidy arch_test. Change-Id: Iededeebc05e54a1e2bb7bb3572b8ba012cffa1c8
|
677cd61ad05d993c4d3b22656675874f06d6aabc |
|
15-Oct-2014 |
Ian Rogers <irogers@google.com> |
Make ART compile with GCC -O0 again. Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 (cherry picked from commit 6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3) Change-Id: I3e7595f437db4828072589d475a5453b7f31003e
|
6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3 |
|
15-Oct-2014 |
Ian Rogers <irogers@google.com> |
Make ART compile with GCC -O0 again. Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 Change-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23
|
59c07060a6fbb93e455b44f00098cafb8e7e26cc |
|
10-Oct-2014 |
Ian Rogers <irogers@google.com> |
Work around ICE bugs with MIPS GCC and O1. Also, work around GCC warning bugs where array accesses with explicit bounds checks are flagged as being out-of-bounds. Significantly, clean-up the HandleScope so the array accesses don't appear out-of-bounds at compile time. Change-Id: I5d66567559cc1f97cd0aa02c0df8575ebadbfe3d
|
13735955f39b3b304c37d2b2840663c131262c18 |
|
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
stdint types all the way! Change-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08
|
5ad97daa3112ca626e3fbf2bf08971977344c3c3 |
|
06-Oct-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Handlerize methods across some GC points. Bug: 12687968 Change-Id: I0d5b0a78488ba76db4d25991d8db95b24bb624e9
|
5a4b8a236030460651a3136397d23ca6744e7eb7 |
|
11-Sep-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rename Handle hierarchy Bring the names in line with normal OO principles: ConstHandle becomes Handle, and Handle becomes MutableHandle. Change-Id: I0f018eb7ba28bc422e3a23dd73a6cbe6fc2d2044
|
7b078e8c04f3e1451dbdd18543c8b9692b5b067e |
|
10-Sep-2014 |
Ian Rogers <irogers@google.com> |
Compile time performance improvements focusing on interpret-only. Reduce virtual method dispatch in the method verifier and make more code inline-able. Add a StringPiece with const char* equality operator to avoid redundant StringPieces and strlens. Remove back link from register line to verifier and pass as argument to reduce size of RegisterLine. Remove instruction length from instruction flags and compute from the instruction, again to reduce size. Add suspend checks to resolve and verify to allow for more easy monitor inflation and reduce contention on Locks::thread_list_suspend_thread_lock_. Change ThrowEarlierClassFailure to throw pre-allocated exception. Avoid calls to Thread::Current() by passing self. Template specialize IsValidClassName. Make ANR reporting with SIGQUIT run using checkpoints rather than suspending all threads. This makes the stack/lock analysis less lock error prone. Extra Barrier assertions and condition variable time out is now returned as a boolean both from Barrier and ConditionVariable::Wait. 2 threaded host x86-64 interpret-only numbers from 341 samples: Before change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms After change: Avg 139.163% 99% CI 3.027ms to 838.257ms Reduction in average compile time after change is 20.9%. Slow-down without change is 26.5%. Bug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable could return unresolved type when class loading is disabled. Bug: 17398101 Change-Id: Id59ce3cc520701c6ecf612f7152498107bc40684
|
ebee8de725d5fa83483642786b19ea453d865762 |
|
13-Aug-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix bugs in the x86 and arm versions of generic JNI. Also fix the run script of 116-nodex2oat to use the non-prebuild script for target. Bug: 17000769 (cherry-picked from commit 54accbca0b549b1b1ad3ef09655dad438bc1e104) Change-Id: I439fcd710fb8bb408f3288ff8fb34fef23890adb
|
4bf8d11df5dccc1b276cd9c40a98e8a14d79a9c8 |
|
25-Jul-2014 |
Jeff Hao <jeffhao@google.com> |
Fix proxy tracing and enable tests that now work with tracing. Also updates proxy_test to generate an image for GetQuickOatCodeFor. Bug: 16386215 (cherry picked from commit f0a3f09c3d54646166a55c05a6b39c7dd504129c) Change-Id: I138edbad9e1646db8590f2b1b73f2788d9710e68
|
54accbca0b549b1b1ad3ef09655dad438bc1e104 |
|
13-Aug-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix bugs in the x86 and arm versions of generic JNI. Also fix the run script of 116-nodex2oat to use the non-prebuild script for target. Bug: 17000769 Change-Id: I439fcd710fb8bb408f3288ff8fb34fef23890adb
|
4ef12f5b0e26c6016c87866f6a33da5ed8e98d74 |
|
01-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add guards to the dex cache and its shortcuts Do not return fields, methods or classes if the (declaring) class is erroneous. Bug: 16692788 (cherry picked from commit 58a5af8568d224ca7eccf2483396ff9862f8d1ee) Change-Id: I7d3e4cb8113e2e764ed7433eed25e1031e6a0f14
|
58a5af8568d224ca7eccf2483396ff9862f8d1ee |
|
01-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add guards to the dex cache and its shortcuts Do not return fields, methods or classes if the (declaring) class is erroneous. Bug: 16692788 Change-Id: If43c2414ad0eb22db5eba7cf66396c7f16c26597
|
f0a3f09c3d54646166a55c05a6b39c7dd504129c |
|
25-Jul-2014 |
Jeff Hao <jeffhao@google.com> |
Fix proxy tracing and enable tests that now work with tracing. Also updates proxy_test to generate an image for GetQuickOatCodeFor. Bug: 16386215 Change-Id: Ie7daad3d73ea7b60187bc1e7037ade0df8277107
|
b551fdcda9eb128c80de37c4fb978968bec6d4b3 |
|
25-Jul-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Clean up CalleeSaveMethod frame and the use of temp registers. CalleeSaveMethod frame size changes : SaveAll : 368 -> 176 RefOnly : 176 -> 96 RefsAndArgs : 304 -> 224 JNI register spill size changes : 160 -> 88 In the transition assembly, use registers following the rules: 1. x0-x7 as temp/argument registers. 2. IP0, IP1 as scratch registers. 3. After correct type of callee-save-frame has been setup, all registers are scratch-able(probably except xSELF and xSUSPEND). 4. When restore callee-save-frame, IP0 and IP1 should be untouched. 5. From C to managed code, we assume all callee save register in AAPCS will be restored by managed code except x19(SUSPEND). In quick compiler: 1. Use IP0, IP1 as scratch register. 2. Use IP1 as hidden argument register(IP0 will be scratched by trampoline.) Change-Id: I05ed9d418b01b9e87218a7608536f57e7a286e4c
|
0398e171f206cd3b140a358ac31b0a3760380df1 |
|
25-Jul-2014 |
Jeff Hao <jeffhao@google.com> |
Fix proxy tracing and enable tests that now work with tracing. Bug: 16386215 Change-Id: Iec2a372c921caceb050c6baf72d48b3d822899a4
|
167cc7c33f7100e3f7acc1594c066daa0122e27a |
|
29-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Fix proxy tracing and enable tests that now work with tracing." This reverts commit 0398e171f206cd3b140a358ac31b0a3760380df1. Change-Id: I1346ab01485cc7207be0ecb4d8788c500c0df903
|
22d5e735f403c57525fe868304c7123f0ce66399 |
|
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Remove object_utils.h. Break into object_lock, field_helper and method_helper. Clean up header files following this. Also tidy some of the Handle code in response to compiler errors when resolving the changes in this CL. Change-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295
|
98d1cc8033251c93786e2fa8c59a2e555a9493be |
|
16-May-2014 |
Mingyao Yang <mingyao@google.com> |
Improve performance of invokevirtual/invokeinterface with embedded imt/vtable Add an embedded version of imt/vtable into class object. Both tables start at fixed offset within class object so method/entry point can be loaded directly from class object for invokeinterface/invokevirtual. Bug: 8142917 Change-Id: I4240d58cfbe9250107c95c0708c036854c455968
|
c380191f3048db2a3796d65db8e5d5a5e7b08c65 |
|
08-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Enable fp-reg promotion Patch introduces 4 register XMM12-15 available for promotion of fp virtual registers. Change-Id: I3f89ad07fc8ae98b70f550eada09be7b693ffb67 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
|
04c31d2c984d382b4186974fa0a416aecbed2625 |
|
08-Jul-2014 |
Ian Rogers <irogers@google.com> |
JNI dlsym lookup fixes. Thread* self is passed on all architectures apart from ARM and ARM64. On x86 restore ebx correctly. Pass self in correct register on x86-64. Ensure methods are compiled in jni_compiler_test even if the generic JNI trampoline is present. Change-Id: If5fdb1de97b78ac5a5cf8d0915c5b82311f23eb9
|
c200a4abeca91e19969f5b35543f17f812ba32b9 |
|
17-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework Generic JNI, add ARM version Refactors and optimizes Generic JNI. This version uses TwoWordReturn to avoid writing to / loading from the bottom of the alloca. Change-Id: I3287007c976f79c9fd32d3b3a43f2d1371bf4cd3
|
6c5cb212fa7010ae7caf9dc765533aa967c95342 |
|
19-Jun-2014 |
Ian Rogers <irogers@google.com> |
Ensure classes are initialized rather than initializing. A class can be being initialized on a different thread, in that case other threads should block trying to access the class. The initializing state shows the class is being initialized but not that its safe for other threads to access. Change occurances of IsInitializing to IsInitialized primarily in slow-path code. Bug: 15347354 Change-Id: Ib586d0a385be6086a890dfbf8868d76f16767fac
|
41c507a9dae44b8329a857da3d9810fab2e9ddc6 |
|
15-May-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: Generalize code to find PC for artInvokeInterfaceTrampoline This allows to determine target method when the interface method has no dex index, now also for X86-64 and ARM64. Add constexpr functions to callee_save_frame.h to have compile-time sizes of callee-save frames. Add a test that ensures they agree with computations by the corresponding ArtMethod methods. Move some instruction-set functions into the header file to allow inlining them. Move arch-specific pointer sizes and alignment sizes out of globals.h to instruction_set.h to reduce dependencies. Change-Id: I2997592c7dd1f4dd2bd497522c64bd235ae615a6 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
|
ea248f8b048d904a8fe806b6a52372985945274d |
|
10-Jun-2014 |
Ian Rogers <irogers@google.com> |
Remove TARGET_REX_SUPPORT define. Change-Id: I1c3644176c101064261d13b50484d2e3ae456316
|
779f8c951c0fbe36d4b213113a99541132947bb7 |
|
10-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Generic JNI for x86 Add the generic JNI trampoline for x86. Small cleanup in the C code. Change-Id: Icaf9de7c0e5e8d1e6cb1135a54552040344cc5a3
|
bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe |
|
22-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change MethodHelper to use a Handle. Added ConstHandle to help prevent errors where you modify the value stored in the handle of the caller. Also fixed compaction bugs related to not knowing MethodHelper::GetReturnType can resolve types. This bug was present in interpreter RETURN_OBJECT. Bug: 13077697 Change-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3
|
d58342caa97108ba413bad467c285c0377f138f5 |
|
05-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add instrumentation stubs for ARM64 and X86-64 Adds instrumentation stubs necessary for debugger support. Refactors MethodAndCode to a top-level TwoWordReturn. A function having a return type of TwoWordReturn will return its two-word content, either 2x32b or 2x64b, in two registers according to the architecture's ABI. Bug: 15443938 Change-Id: Id7e1fbd4ad8eb6f29e23d48903c76f77b28d981a
|
58994cdb00b323339bd83828eddc53976048006f |
|
16-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Hard Float ABI support in QCG This patch shows our efforts on resolving the ART limitations: - passing "float"/"double" arguments via FPR - passing "long" arguments via single GPR, not pair - passing more than 3 agruments via GPR. Work done: - Extended SpecialTargetRegister enum with kARG4, kARG5, fARG4..fARG7. - Created initial LoadArgRegs/GenDalvikX/FlushIns version in X86Mir2Lir. - Unlimited number of long/double/float arguments support - Refactored (v2) Change-Id: I5deadd320b4341d5b2f50ba6fa4a98031abc3902 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
|
ffddfdf6fec0b9d98a692e27242eecb15af5ead2 |
|
03-Jun-2014 |
Tim Murray <timmurray@google.com> |
DO NOT MERGE Merge ART from AOSP to lmp-preview-dev. Change-Id: I0f578733a4b8756fd780d4a052ad69b746f687a9
|
cf4035a4c41ccfcc3e89a0cee25f5218a11b0705 |
|
29-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Use StackReference in Quick Stack Frame The method reference at the bottom of a quick frame is a stack reference and not a native pointer. This is important for 64b architectures, where the notions do not coincide. Change key methods to have StackReference<mirror::ArtMethod>* parameter instead of mirror::ArtMethod**. Make changes to invoke stubs for 64b archs, change the frame setup for JNI code (both generic JNI and compilers), tie up loose ends. Tested on x86 and x86-64 with host tests. On x86-64, tests succeed with jni compiler activated. x86-64 QCG was not tested. Tested on ARM32 with device tests. Fix ARM64 not saving x19 (used for wSUSPEND) on upcalls. Tested on ARM64 in interpreter-only + generic-jni mode. Fix ARM64 JNI Compiler to work with the CL. Tested on ARM64 in interpreter-only + jni compiler. Change-Id: I77931a0cbadd04d163b3eb8d6f6a6f8740578f13
|
0cd81352a7c06e381951cea1b104fd73516f4341 |
|
23-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Fix an outstanding compaction bug in interpreter."" Fixed the generic trampoline to not use ToJObject when unnecessary. Bug: 15167269 This reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459. Change-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271
|
3bdb873122964da7937eb070cbcf2ef638a8e459 |
|
23-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Fix an outstanding compaction bug in interpreter." This reverts commit e09ae0920be57760fb390b6944bce420fa0b5582. Change-Id: I48036306130d5ccfec683d0dc3e9a642a02ee9c1
|
e09ae0920be57760fb390b6944bce420fa0b5582 |
|
15-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix an outstanding compaction bug in interpreter. Fixed a bug in DoFieldPut where the FieldHelper GetType could cause thread suspension which would result in a stale obj. Added more handles in the class linker to facilitate moving fiels and methods in the future. Removed un-necessarly passing handle references since these are value types and don't need to be passed by reference. Added a special NullHandle type which allows null handles without a handle scope. Change-Id: I1b51723920a2e4f4f8b2907066f578a3e879fd5b
|
51f763506c7bb34420242e88e1631550f94d6417 |
|
21-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add INVOKE_TRAMPOLINE and imt_conflict stub to 64b architectures "Generalize" the return type notion of the interface helpers. Includes a simple test for imt_conflict. The other interface trampolines are as of yet untested. Change-Id: I30fc75f5103766d57628ff22bcbac7c7f81037e3
|
700a402244a1a423da4f3ba8032459f4b65fa18f |
|
20-May-2014 |
Ian Rogers <irogers@google.com> |
Now we have a proper C++ library, use std::unique_ptr. Also remove the Android.libcxx.mk and other bits of stlport compatibility mechanics. Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
|
eb8167a4f4d27fce0530f6724ab8032610cd146b |
|
08-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add Handle/HandleScope and delete SirtRef. Delete SirtRef and replaced it with Handle. Handles are value types which wrap around StackReference*. Renamed StackIndirectReferenceTable to HandleScope. Added a scoped handle wrapper which wraps around an Object** and restores it in its destructor. Renamed Handle::get -> Get. Bug: 8473721 Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
|
f5c3243530805c41cd8706989a1e60367447a493 |
|
05-May-2014 |
Mingyao Yang <mingyao@google.com> |
Add some debugging info for bug 14469172. Change-Id: Iba7d47b6a697ab61e10dfc9e1c2b8fde24af27be
|
f486778d50fc8afa61330df495e94f4f3ec0e238 |
|
05-May-2014 |
Mingyao Yang <mingyao@google.com> |
Add some debugging info for bug 14469172. Change-Id: Iba7d47b6a697ab61e10dfc9e1c2b8fde24af27be
|
42fcd9838a87abaf7a2ef86853a5287f86dbe391 |
|
22-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "64bit changes to the stack walker for the Quick ABI."" This reverts commit 8d5ead52a92675c258113d3dfa71bf8fceba5d9f. Change-Id: I6b4774a9bd180de33551975e106322ba1192e6ab
|
8d5ead52a92675c258113d3dfa71bf8fceba5d9f |
|
22-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "64bit changes to the stack walker for the Quick ABI." This reverts commit 5cb328362a633302ca0fcdbaa0da7d94069df051. Change-Id: Icc0ec1a9f15c2e4e9103e732d7ba75a4feb853b1
|
5cb328362a633302ca0fcdbaa0da7d94069df051 |
|
17-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
64bit changes to the stack walker for the Quick ABI. - Spill registers have different sizes. - The ArtMethod at the bottom of the stack is always of kWordSize. Change-Id: I92f67ff928477970c393c7146980255d08e8e6af
|
1dd61ba3081a52c3e2efdc78d64f5c134eea7895 |
|
02-Apr-2014 |
Vladimir Kostyukov <vladimir.kostyukov@intel.com> |
ART: A workaround for a wrongly-read caller's frame The quick-trampoline treats caller's frame in a different way then it was formed by quck-invoke stub for hard float ABI targets such as x86_64 and aarch64. The patch workarounds the issue of wrongly-read stack arguments due to no contract between quick-invoke stub and quick-trampoline/shadow-frame-builder regarding the reg- spill area. Change-Id: I302f212b4ea5e38632527a5ace03f136b21ef806 Signed-off-by: Vladimir Kostyukov <vladimir.kostyukov@intel.com>
|
ad61517890168ff6ed19063cc8032a9c033d135b |
|
05-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Fix wrong handling of Generic JNI not finding native method. Code did not properly call JNIMethodEnd, such that locks etc where not correctly handled. Add a test case to jni_compiler_test. Change-Id: If2d5c628517d65a56dd6bb5c4cabdff77c7664a1
|
0bf8b9ca3899a2913948d02fa17ce5fbe3e7af54 |
|
04-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Please clang by making explicit instantiations non-static. Change-Id: I4112bf62c69b4f28ca369c4bf3c626be43692afd
|
8689a0a0f266dde073fe7b328c3ceeaa1b23276a |
|
04-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Explicitly instantiate artInvokeCommon to please analysis tool. Change-Id: I5c078a197c5026e9bd886d0ba1e188054b5ffa75
|
5f3ded46a1da26f6a51cad16d421ca2fdc0f23ad |
|
04-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Restore the args in the invoke trampoline slow paths. Previously, there were errors caused by not restoring the args for the slow path in artInvokeInterfaceTrampoline and artInvokeCommon. The slow path in artInvokeInterfaceTrampoline occurs when you attempt to do an interface dispatch of a method in another dex file. The slow path in artInvokeCommon occurs when the method in dex cache is not already resolved. Since FindMethodFromCode may resolve a method, it can occasionally cause thread suspension/GC. If a moving GC occurred at this point it resulted in this_object being invalid after the trampoline returned the code pointer. This caused a native crash in one of the money runs since there was an unbundeled app which did a List.iterator call. Bug: 12934910 Change-Id: Ib454faad14bef0d7732a6d7f1ca5803472d502a6
|
b95a5345ae4217b70ca36f0cced92f68dda7caf5 |
|
12-Mar-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Add arm64 runtime support. Adds support for arm64 to ART. Assembler stubs are sufficient for down calls into interpreter. JNI compiler and generics are not finished. Basic Generic JNI functionality. Change-Id: I4a07c79d1e037b9f5746673480e32cf456867b82
|
53b8b09fc80329539585dcf43657bc5f4ecefdff |
|
14-Mar-2014 |
Ian Rogers <irogers@google.com> |
Refactor reflective method invocation. Move invocation code out of JNI internal into reflection, including ArgArray code. Make reflective invocation use the ArgArray to build arguments rather than allocating a jvalue[] and unboxing arguments into that. Move reflection part of jni_internal_test into reflection_test. Make greater use of fast JNI. Change-Id: Ib381372df5f9a83679e30e7275de24fa0e6b1057
|
9a6a99aaac2e4c973e0bc71075f196b8b084100f |
|
14-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Remove small duplicate code in Generic JNI handling, add comments Change-Id: Ib276fa63b6a00480eaaff6c352d37917c61e966c
|
90546836312adda54f28b700f25ff29ec8becdf8 |
|
13-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Fixes for Generic JNI This fixes some linking issues and native code retrieval errors. All host tests are functional with this change. Make ArtMethod::GetFrameSizeInBytes() templated to bypass the embedded sanity check. Necessary for fix-up decision. Add ArtMethod metadata fix-up code to ClassLinker::LinkCode. Necessitates new parameters to access the shorty and compute the frame size. Fix handling the JNI dlsym lookup stub in the generic JNI code. Change-Id: I4173b0fbb1ba5b1bcbee1bb340cfdd08a54767e5
|
9758f79a6c1ef7f662caca9c1df39de1934166b8 |
|
13-Mar-2014 |
Ian Rogers <irogers@google.com> |
Implement FINAL/OVERRIDE for clang. Separate declaration from definition in certain places to work-around issues with clang. Remove bogus lock annotation at definition in compilers.cc that is already present at the declaration. Remove duplicate definition of ClassReference. Change-Id: I5368057bb36319a259110b2198610d9d2b2e5041
|
36fea8dd490ab6439f391b8cd7f366c59f026fd2 |
|
10-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Fixing structure of native frame for Generic JNI This changes the layout of the callee-save frame used in generic JNI to be consistent with the JNI compiler, that is, the SIRT is inline (above the method reference). Now the location of the "this" object is consistent. Change-Id: Ibad0882680712cb640b4c70ada0229ef7cf4e62c
|
7a0e504e60441012c78fc2f3ab8d4da131185c50 |
|
07-Mar-2014 |
Andreas Gampe <agampe@google.com> |
More JNI compiler tests and small fix Add checks for alignment, floats, and maximum number of parameters Fixed x86_64 ABI wrong interpretation (floats not widened in registers) Change-Id: I6c09af4914b7675ac0275ce21003e317ca44a403
|
e0dcd46314d07eeb332edea292f5110178e4e3d2 |
|
09-Mar-2014 |
Ian Rogers <irogers@google.com> |
JNI down call fixes. Ensure SIRT isn't accessed via quick callee save frame. Some tidying of code. Change-Id: I8fec3e89aa6d2e86789c60a07550db2e92478ca7
|
c147b00f86c28f5275c99c8ce515499c90c01e31 |
|
07-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Release unused parts of a JNI frame before calling native code Two-pass process for setting up the JNI frame so we can put Sirt and native call stack as close together as possible. Change-Id: I827167a55fafc4eba7d4eaf14a35fc69fd5f85ce
|
bf6b92a158053c98b15f4393abb3b86344ec9a20 |
|
06-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Generic JNI implementation for x86_64 Starting implementation for generic JNI on x86_64. Frames are of large static size (>4K) right now, should be compacted later. Passes the whole of jni_compiler_test. Change-Id: I88ac3e13a534afe7568d62a1ef97cb766e8260e4
|
2ec6520d57479d393bffa05defa1479b25ca8382 |
|
04-Mar-2014 |
Brian Carlstrom <bdc@google.com> |
Support compiler filters for boot classpath image_writer.cc Remove assumption that all methods in the boot classpath are compiled oat_writer.cc Don't skip writing ArtMethod::quick_code_offset_ for methods that need resolution, leave that to ImageWriter dex2oat.cc Allow dex2dex compilation of image dex files by making the in memory pages writable in all cases, not just app case. oatdump.cc dump new OatHeader fields use ImageSpace.GetImageFilename, not command line image filename, since location may be in dalvik-cache remove inaccurate check about non-null GC map quick_trampoline_entrypoints.cc add and improve some DCHECKS that were useful while debugging class_linker.cc image_space.cc fix double facepalm parsed_options.cc fix zygote logging to not skip values to two part options like -classpath <foo> runtime.cc wireup parsed compiler options to runtime Change-Id: Iad314df0b80623c0663d61713d5098297ab9ac87
|
2da882315a61072664f7ce3c212307342e907207 |
|
27-Feb-2014 |
Andreas Gampe <agampe@google.com> |
Initial changes towards Generic JNI option Some initial changes that lead to an UNIMPLEMENTED. Works by not compiling for JNI right now and tracking native methods which have neither quick nor portable code. Uses new trampoline. Change-Id: I5448654044eb2717752fd7359f4ef8bd5c17be6e
|
55871bf5277f8e8041f1303a416be2cd9215aa07 |
|
27-Feb-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add null check in artQuickResolutionTrampoline Also fix possible compaction bug around ResolveMethod. Bug: 13221223 Change-Id: I0495eaee8d5f9ae5da0a87c4800a66cd04dc4aa7
|
5275bcbf35c2362a10607670e59edbfdfc80a758 |
|
21-Feb-2014 |
Mathieu Chartier <mathieuc@google.com> |
Restore refs in artQuickProxyInvokeHandler. Fixes a compaction related bug which could be caused by moving args in artQuickProxyInvokeHandler and not updating them before returning back into compiled code. Also changed some Object** to StackReferences. Change-Id: I0779c8fd5f10f142d3c6149ddc531c99ff8ee4c2
|
936b37f3a7f224d990a36b2ec66782a4462180d6 |
|
14-Feb-2014 |
Ian Rogers <irogers@google.com> |
Upcall support for x86-64. Sufficient to pass jni_internal_test. Change-Id: Ia0d9b8241ab8450e04765b9c32eb6dc8fc1a8733
|
d2fe10a3a34af171bf1631219cd2d6ff6b7778b5 |
|
15-Jan-2014 |
Sebastien Hertz <shertz@google.com> |
Remove blacklist Removes the class initialization blacklist and use transaction to detect and revert class initialization attempting to invoke native method. This only concerns class initialization happening at compilation time when generating an image (like boot.art for the system). In transactional mode, we log every object's field assignment and array update. Therefore we're able to abort a transaction to restore values of fields and array as they were before the transaction starts. We also log changes to the intern string table so we can restore its state prior to transaction start. Since transactional mode only happens at compilation time, we don't need to log all these changes at runtime. In order to reduce the overhead of testing if transactional mode is on/off, we templatize interfaces of mirror::Object and mirror::Array, respectively responsible for setting a field and setting an array element. For various reasons, we skip some specific fields from transaction: - Object's class and array's length must remain unchanged so garbage collector can compute object's size. - Immutable fields only set during class loading: list of fields, method, dex caches, vtables, ... as all classes have been loaded and verified before a transaction occurs. - Object's monitor for performance reason. Before generating the image, we browse the heap to collect objects that need to be written into it. Since the heap may still holds references to unreachable objects due to aborted transactions, we trigger one collection at the end of the class preinitialization phase. Since the transaction is held by the runtime and all compilation threads share the same runtime, we need to ensure only one compilation thread has exclusive access to the runtime. To workaround this issue, we force class initialization phase to run with only one thread. Note this is only done when generating image so application compilation is not impacted. This issue will be addressed in a separate CL. Bug: 9676614 Change-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9
|
bbcc0c0a17262f3d2a70fc0a82e1783862f708cc |
|
03-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Speed up method lookup in a different dex file. Use already known name and proto. Change-Id: I4505b81724bd6a0f3cf21ee6fed44774d38c4e15
|
ef7d42fca18c16fbaf103822ad16f23246e2905d |
|
06-Jan-2014 |
Ian Rogers <irogers@google.com> |
Object model changes to support 64bit. Modify mirror objects so that references between them use an ObjectReference value type rather than an Object* so that functionality to compress larger references can be captured in the ObjectRefererence implementation. ObjectReferences are 32bit and all other aspects of object layout remain as they are currently. Expand fields in objects holding pointers so they can hold 64bit pointers. Its expected the size of these will come down by improving where we hold compiler meta-data. Stub out x86_64 architecture specific runtime implementation. Modify OutputStream so that reads and writes are of unsigned quantities. Make the use of portable or quick code more explicit. Templatize AtomicInteger to support more than just int32_t as a type. Add missing, and fix issues relating to, missing annotalysis information on the mutator lock. Refactor and share implementations for array copy between System and uses elsewhere in the runtime. Fix numerous 64bit build issues. Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
|
c528dba35b5faece51ca658fc008b688f8b690ad |
|
26-Nov-2013 |
Mathieu Chartier <mathieuc@google.com> |
Enable moving classes. Slight reduction in Zygote size, memory savings are in the noise. Before: Zygote size: 8739224 After: Zygote size: 8733568 Fixed a bug where we didn't set the concurrent start bytes after switching the allocator from bump pointer to ROSAlloc in the zygote. This caused excessive memory usage. Added the method verifiers as roots to fix an issue caused by RegTypes holding a Class*. Added logic to clear card table in the SemiSpace collector, this reduces DalvikOther from ~2400k -> ~1760k when using the SemiSpace collector. Added a missing lock to the timing loggers which caused a rare one time crash in std::set. Bug: 11771255 Bug: 8499494 Bug: 10802951 Change-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae
|
590fee9e8972f872301c2d16a575d579ee564bee |
|
13-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Compacting collector. The compacting collector is currently similar to semispace. It works by copying objects back and forth between two bump pointer spaces. There are types of objects which are "non-movable" due to current runtime limitations. These are Classes, Methods, and Fields. Bump pointer spaces are a new type of continuous alloc space which have no lock in the allocation code path. When you allocate from these it uses atomic operations to increase an index. Traversing the objects in the bump pointer space relies on Object::SizeOf matching the allocated size exactly. Runtime changes: JNI::GetArrayElements returns copies objects if you attempt to get the backing data of a movable array. For GetArrayElementsCritical, we return direct backing storage for any types of arrays, but temporarily disable the GC until the critical region is completed. Added a new runtime call called VisitObjects, this is used in place of the old pattern which was flushing the allocation stack and walking the bitmaps. Changed image writer to be compaction safe and use object monitor word for forwarding addresses. Added a bunch of added SIRTs to ClassLinker, MethodLinker, etc.. TODO: Enable switching allocators, compacting on background, etc.. Bug: 8981901 Change-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99
|
83883d7fddf30fdb8b6903560fa1337ab991e74c |
|
22-Oct-2013 |
Ian Rogers <irogers@google.com> |
Populate dex cache for sharpened calls. We ensured the resolved method was in the dex cache, but for a sharpened call this is abstract. Ensure that the concrete method is also resolved. Limit the use of direct dex cache based dispatch to cases where we know how to patch the dex cache. Bug 11389002 Change-Id: I08252686a53b5948650632837c74bcd5cbf8a862
|
07d447bebe6cc358e05ef041db84a5095a69e4f1 |
|
26-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Make artQuickResolutionTrampoline fix up references after GC points. Required for compaction. Bug: 8981901 Change-Id: I53a5f942af2a4428fe3548ba1856967632c2df9f
|
d3633d52e5d21beea73c2e902c043cf96b70df74 |
|
21-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Add some extra DCHECKS for debugging artQuickProxyInvokeHandler Bug: 10094803 Change-Id: I8cc08cd54dbe67781a8264cf2ceb5dab24b78799
|
bd136a29f08486525d6abc7d0a0006ce5b4011c1 |
|
14-Aug-2013 |
Dragos Sbirlea <dragoss@google.com> |
Get PORTABLE + SMALL on x86. Implemented the portable resolution trampoline and the portable to interpreter bridge. Also work on integrating SEA_IR in the PORTABLE+SMALL framework. Refactor some naming and correct indenting. Change-Id: Ibd97da5e5b6f5148274c9bff368e3654b661ef51
|
ea46f950e7a51585db293cd7f047de190a482414 |
|
30-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Refactor java.lang.reflect implementation Cherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1. Move to ArtMethod/Field instead of AbstractMethod/Field and have java.lang.reflect APIs delegate to ArtMethod/ArtField. Bug: 10014286. Change-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7
|
468532ea115657709bc32ee498e701a4c71762d4 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e (cherry picked from commit 848871b4d8481229c32e0d048a9856e5a9a17ef9)
|
848871b4d8481229c32e0d048a9856e5a9a17ef9 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e
|