2d857af288e020909a17dee1cb2b6e227a527d67 |
|
18-Jul-2016 |
Mathieu Chartier <mathieuc@google.com> |
Do allocation fence before pushing on allocation stack Heap::VisitObjects relies on having valid classes for objects in the allocation stack. If the writes reorder, the thread calling VisitObjects could see the free list pointer instead of the class of the object. I believe this is causing crashes in VisitObjects. Bug: 28790624 Test: Volantis booted (cherry picked from commit 011dc2c4b9f3a064cba801679aedd3251fe191e3) Change-Id: Ib620acbcd641ccd59fea9a66f5587c5026110a22
|
fc6898769ae1ef91ec3e41c0a273401213cb82cd |
|
26-Apr-2016 |
Andreas Gampe <agampe@google.com> |
ART: Log all monitor operations to systrace Add a VLOG option ("-verbose:systrace-locks") to log all monitor operations to systrace. This requires non-fastpath thread entrypoints, and ATRACE tags for locking and unlocking. Do a bit of cleanup to the entrypoint initialization to share common setup. Bug: 28423466 Change-Id: Ie67e4aa946ec15f8fcf8cb7134c5d3cff0119ab3
|
cd77378e668c5d58cf53af33f9c1ca2bf7c1108a |
|
08-Apr-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Assembly region TLAB allocation fast path for arm64. This is for the CC collector. Share the common fast path code with the tlab fast path code. Speedup (on N9): BinaryTrees: 1235 -> 443 ms (-64%) MemAllocTest: 1647 -> 766 ms (-53%) Bug: 9986565 Bug: 12687968 Change-Id: I67049cc0b4d6508934f07d039d421ee162b330bf
|
59028d90d51a800bcea8be354d77d7be924da3a0 |
|
29-Mar-2016 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
MIPS: Improving art_quick_imt_conflict_trampoline This is fixing stub_test for MIPS32 and MIPS64. This is follow up change for Ie74d1c77cf73d451a1142bdc5e3683f9f84bb4e7. Change-Id: I3c53ef690aff49d7cf9ad3de3aaed9a3d2e1c6b9
|
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
|
d72945c6b18831630af8755fcf041f5a59c82cae |
|
16-Mar-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Revert "Revert "Assembly TLAB allocation fast path for arm64."" This reverts commit 52fa2c698b995c21940f366cf3a44204ddf4f8e9. Fix the mvn instructions. Bug: 9986565 Change-Id: Ib7b2023cd54c57131442e1de85c64f40b818313d
|
52fa2c698b995c21940f366cf3a44204ddf4f8e9 |
|
16-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Assembly TLAB allocation fast path for arm64." Assembly code does not compile Bug: 9986565 This reverts commit b7e52b02a82c69e59c88f06945fb21672dfe9923. Change-Id: I80de1bcd6270e2d76f79cb708811a41c039ea5bb
|
b7e52b02a82c69e59c88f06945fb21672dfe9923 |
|
10-Mar-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Assembly TLAB allocation fast path for arm64. This is the arm64 version of CL 187537. Speedup (GSS GC with TLAB on N9): BinaryTrees: 591 -> 493 ms (-17%) MemAllocTest: 792 -> 755 ms (-5%) Bug: 9986565 Change-Id: Icdad28cab0fd835679c640b7eae59b33ac2d6654
|
10d4c08c0ea9df0a85a11e1c77974df24078c0ec |
|
24-Feb-2016 |
Hiroshi Yamauchi <yamauchi@google.com> |
Assembly region TLAB allocation fast path for arm. This is for the CC collector. Share the common fast path code with the tlab fast path code. Speedup (on N5): BinaryTrees: 2291 -> 902 ms (-60%) MemAllocTest: 2137 -> 1845 ms (-14%) Bug: 9986565 Bug: 12687968 Change-Id: Ica63094ec2f85eaa4fd04d202a20090399275d85
|
b331febbab8e916680faba722cc84b66b84218a3 |
|
05-Feb-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Implement on-stack replacement for arm/arm64/x86/x86_64."" This reverts commit bd89a5c556324062b7d841843b039392e84cfaf4. Change-Id: I08d190431520baa7fcec8fbdb444519f25ac8d44
|
bd89a5c556324062b7d841843b039392e84cfaf4 |
|
05-Feb-2016 |
David Brazdil <dbrazdil@google.com> |
Revert "Implement on-stack replacement for arm/arm64/x86/x86_64." DCHECK whether loop headers are covered fails. This reverts commit 891bc286963892ed96134ca1adb7822737af9710. Change-Id: I0f9a90630b014b16d20ba1dfba31ce63e6648021
|
891bc286963892ed96134ca1adb7822737af9710 |
|
29-Jan-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Implement on-stack replacement for arm/arm64/x86/x86_64. High-level overview: - osr_method_threshold is used to know when to compile a method in osr mode (-> treat all loops as irreducible). - branch instructions in the compiler query whether they can jump to an osr method. - An osr entry point is found through the stack maps: if a stack map is duplicated in the CodeInfo, it is an osr entry point. Change-Id: Ifb39338cd281e2c7eccce67f4e18d46428be71e4
|
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
|
efea1fc8d8739e58c8b8e70a3b97f2bc9182a59c |
|
05-Aug-2015 |
Przemyslaw Szczepaniak <pszczepaniak@google.com> |
Fixed arm64 string compareto&indexof asm code. Change-Id: I4a419fe3d3a2d8dc3055961bded1dc4ae456c1ea
|
6f6244ab72255daa4c6ec0b2a3f6ba582659e1c2 |
|
22-Oct-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Rosalloc fast path in assembly for arm64. Measurements (N9, ms) BinaryTrees: 1120 -> 554 (-51%) MemAllocTest: 1449 -> 1164 (-20%) Bug: 9986565 Change-Id: I6984c638e7ce2abd2384244debff0dcbac601b69
|
e460d1df1f789c7c8bb97024a8efbd713ac175e9 |
|
29-Sep-2015 |
Calin Juravle <calin@google.com> |
Revert "Revert "Support unresolved fields in optimizing" The CL also changes the calling convetion for 64bit static field set to use kArg2 instead of kArg1. This allows optimizing to keep the asumptions: - arm pairs are always of form (even_reg, odd_reg) - ecx_edx is not used as a register on x86. This reverts commit e6f49b47b6a4dc9c7684e4483757872cfc7ff1a1. Change-Id: I93159917565824084abc96775f31be1a4249f2f3
|
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
|
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
|
6306921722283d2b0f8aac01883ad83215d6e864 |
|
22-Aug-2015 |
Man Cao <manc@google.com> |
Add a missing reader barrier in entrypoint stub Also refactored some comments. Change-Id: I5c50f487bf9d71f1be5f6c8814bf039993fc1267
|
c548ae756a3131b1a7c9abc387697218837e29d3 |
|
27-Jul-2015 |
Chih-Hung Hsieh <chh@google.com> |
ART: Remove unique-numbered labels from arm64 assembly Use local labels like 1, 2, 3 in macros. Clang does not support the unique counter variable \@. Bug: 22799850 Change-Id: I9ef1859be40b875ef4d7ae74ec1af52ad05f7352
|
c0da7ac6ce579ce019788e312e68f9f16c258b91 |
|
27-Jul-2015 |
Chih-Hung Hsieh <chh@google.com> |
ART: Remove unique-numbered labels from arm64 assembly Use local labels like 1, 2, 3 in macros. Clang does not support the unique counter variable \@. Bug: 22799850 Change-Id: I9ef1859be40b875ef4d7ae74ec1af52ad05f7352
|
1aee900d5a0b3a8d78725a7551356bda0d8554e1 |
|
15-Jul-2015 |
Man Cao <manc@google.com> |
Add read barrier support to the entrypoints. Also remove "THIS_LOAD_REQUIRES_READ_BARRIER" since reading an ArtMethod* no longer needs read barrier. stub_test should also work with read barriers now. Change-Id: I3fba18042de2f867a18dbdc38519986212bd9769
|
3031c8da0c5009183f770b005c245f9bf2a4d01b |
|
14-Jul-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove art_quick_invoke_interface_trampoline The function has only been used by the IMT conflict resolution trampoline for a while. Merge the two, which saves a branch. Change-Id: I2f8c9204adf839ddc5459cc04e70d98f858110a1
|
e7d876adcfc1977800264ab7540aa488c1568b48 |
|
28-Jun-2015 |
Mathieu Chartier <mathieuc@google.com> |
ART: Fix CFI annotation for art_quick_aput_obj Fix the CFI state after an early return. Bug: 22014525 (cherry picked from commit 2738639bcd30b908d825725169b7497ed047debb) Change-Id: I56b9ba8cf8c47d70a642f064e59c7e04a476dd2f
|
2738639bcd30b908d825725169b7497ed047debb |
|
28-Jun-2015 |
Mathieu Chartier <mathieuc@google.com> |
ART: Fix CFI annotation for art_quick_aput_obj Fix the CFI state after an early return. Bug: 22014525 Change-Id: I56b9ba8cf8c47d70a642f064e59c7e04a476dd2f
|
6b90d42316e0370c789dddb5dda48d7403ea378f |
|
27-Jun-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix CFI annotation in arm64, x86 and x86-64 assembly To be able to unroll in the exception case, the state needs to be reset to before the jump. Bug: 22014525 Change-Id: Ic60400b5bf0efcb713c24df1728623d072f344ab
|
bfa5eb6e8d15ea73a36f8df449630f285a91e995 |
|
30-May-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add heap poisoning support to the entrypoints. In preparation for full compiler/managed-code support. Enable stub_test with heap poisoning. Bug: 12687968 Change-Id: I79fc54ce6386c0a1eb9621759bb4cc23bc393a75
|
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
|
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
|
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
|
27a4a9d2a488dd57cd00d9108d10defde04141a2 |
|
05-May-2015 |
Sebastien Hertz <shertz@google.com> |
Fix instrumentation exit stub for arm64 Fixes bad offset to restore register x21. Bug: 20798393 (cherry picked from commit a538effb3f848bfec232c55f167b9f35b416948f) Change-Id: I030d848ab0f46043e86f53abae204463f0aaccbe
|
a538effb3f848bfec232c55f167b9f35b416948f |
|
05-May-2015 |
Sebastien Hertz <shertz@google.com> |
Fix instrumentation exit stub for arm64 Fixes bad offset to restore register x21. Bug: 20798393 Change-Id: I030d848ab0f46043e86f53abae204463f0aaccbe
|
848f70a3d73833fc1bf3032a9ff6812e429661d9 |
|
15-Jan-2014 |
Jeff Hao <jeffhao@google.com> |
Replace String CharArray with internal uint16_t array. Summary of high level changes: - Adds compiler inliner support to identify string init methods - Adds compiler support (quick & optimizing) with new invoke code path that calls method off the thread pointer - Adds thread entrypoints for all string init methods - Adds map to verifier to log when receiver of string init has been copied to other registers. used by compiler and interpreter Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
|
5ea536aa4a6414db01beaf6f8bd8cb9adc5cfc92 |
|
20-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Remove ArtMethod* parameter from dex cache entry points. Load the ArtMethod* using an optimized stack walk instead. This reduces the size of the generated code. Three of the entry points are called only from a slow-path and the fourth (InitializeTypeAndVerifyAccess) is rare and already slow enough that the one or two extra loads (depending on whether we already have the ArtMethod* in a register) are insignificant. And as we're starting to use PC-relative addressing of the dex cache arrays (already done by Quick for the boot image), having the ArtMethod* in a register becomes less likely anyway. Change-Id: Ib19b9d204e355e13bf386662a8b158178bf8ad28
|
2cebb24bfc3247d3e9be138a3350106737455918 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Replace NULL with nullptr Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
|
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
|
bb87e0f1a52de656bc77cb01cb887e51a0e5198b |
|
03-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Refactor and improve GC root handling Changed GcRoot to use compressed references. Changed root visiting to use virtual functions instead of function pointers. Changed root visting interface to be an array of roots instead of a single root at a time. Added buffered root marking helper to avoid dispatch overhead. Root marking seems a bit faster on EvaluateAndApplyChanges due to batch marking. Pause times unaffected. Mips64 is untested but might work, maybe. Before: MarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us After: MarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us Bug: 19264997 Change-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca
|
e15ea086439b41a805d164d2beb07b4ba96aaa97 |
|
10-Feb-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Reserve bits in the lock word for read barriers. This prepares for the CC collector to use the standard object header model by storing the read barrier state in the lock word. Bug: 19355854 Bug: 12687968 Change-Id: Ia7585662dd2cebf0479a3e74f734afe5059fb70f
|
126d65952a03b3e44d5021208673c01920a982a4 |
|
03-Mar-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix generic JNI stubs to not discard the Java native frame. Change-Id: Ic856b442fdde5ce91673fc5856eb0dfc84c75d28
|
1cc7dbabd03e0a6c09d68161417a21bd6f9df371 |
|
18-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Reorder entrypoint argument order Shuffle the ArtMethod* referrer backwards for easier removal. Clean up ARM & MIPS assembly code. Change some macros to make future changes easier. Change-Id: Ie2862b68bd6e519438e83eecd9e1611df51d7945
|
4808846b2a8647a448aaa05d561a4f60b190196b |
|
12-Dec-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Save all registers in native to Java stubs. This will make things more friendly when experimenting with the number of callee saves in optimizing. Change-Id: Iefd9a2da329a420eb69fc2fa9e91c06bbda30cdb
|
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
|
0ff20d50fcf120b798cabf8cebd77d54850e6cd5 |
|
22-Oct-2014 |
Stephen Kyle <stephen.kyle@arm.com> |
Fix arm64 bug introduced by refactoring. - Commit 1d8cdbc5202378 made changes to the parameters for artSet64InstanceFromCode, but did not change THREE_ARG_DOWNCALL to THREE_ARG_REF_DOWNCALL for arm64. Change-Id: If256b0bd32dbd1c95f61e0afcb35975bb09a8b97 Signed-off-by: Stephen Kyle <stephen.kyle@arm.com>
|
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
|
ec1694ddb034c4b86da59e9ba989ac1d8af2845c |
|
09-Oct-2014 |
Ian Rogers <irogers@google.com> |
Fix ARM64 build. Change-Id: Ia0044523473d7a93ef3f0eed8e6c28602e767c17
|
3b37073e52f3b8a2a9e16bc9a019ef2607a97245 |
|
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Fix arm64 build: move macro usage after definition. The build was broken by https://android-review.googlesource.com/110341 Change-Id: I137b4bc694af15465bf0db3ffe337950064d2a53
|
832336b3c9eb892045a8de1bb12c9361112ca3c5 |
|
09-Oct-2014 |
Ian Rogers <irogers@google.com> |
Don't copy fill array data to quick literal pool. Currently quick copies the fill array data from the dex file to the literal pool. It then has to go through hoops to pass this PC relative address down to out-of-line code. Instead, pass the offset of the table to the out-of-line code and use the CodeItem data associated with the ArtMethod. This reduces the size of oat code while greatly simplifying it. Unify the FillArrayData implementation in quick, portable and the interpreters. Change-Id: I9c6971cf46285fbf197856627368c0185fdc98ca
|
37f05ef45e0393de812d51261dc293240c17294d |
|
17-Jul-2014 |
Fred Shih <ffred@google.com> |
Reduced memory usage of primitive fields smaller than 4-bytes Reduced memory used by byte and boolean fields from 4 bytes down to a single byte and shorts and chars down to two bytes. Fields are now arranged as Reference followed by decreasing component sizes, with fields shuffled forward as needed. Bug: 8135266 Change-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752
|
29b3841ad8c1c18ee7ddd2d8cab85806b3d62eaa |
|
13-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Set default visibility to protected Set default visibility of symbols to protected. This allows the linker to optimize internal calls and helps avoid plt calls. Make almost all assembly stubs hidden, as -fvisibility does not seem to apply to them. Change the assembly tests accordingly. Also allows to clean up previous hacks to avoid plt calls. Bug: 16974467 (cherry picked from commit 235e77bd9f19e4faefda109be40f8744f3a66f40) Change-Id: I9030dcf6116251f434f94a2b08e56e12085af652
|
b038ba66a166fb264ca121632f447712e0973b5b |
|
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Reduce stack usage for overflow checks"" Fixes stack protection issue. Fixes mac build issue. This reverts commit 83b1940e6482b9d8feba5c492507735686650ea5. Change-Id: I7ba17252882b23a740bcda2ea94aacf398255406
|
4cf00ba324f5f6884059796a6ba41937f32e1844 |
|
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Reduce stack usage for overflow checks" This reverts commit 63c051a540e6dfc806f656b88ac3a63e99395429. Change-Id: I282a048994fcd130fe73842b16c21680053c592f
|
03c9785a8a6d712775cf406c4371d0227c44148f |
|
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Reduce stack usage for overflow checks"" Fixes stack protection issue. Fixes mac build issue. This reverts commit 83b1940e6482b9d8feba5c492507735686650ea5. Change-Id: I7ba17252882b23a740bcda2ea94aacf398255406
|
83b1940e6482b9d8feba5c492507735686650ea5 |
|
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Reduce stack usage for overflow checks" This reverts commit 63c051a540e6dfc806f656b88ac3a63e99395429. Change-Id: I282a048994fcd130fe73842b16c21680053c592f
|
235e77bd9f19e4faefda109be40f8744f3a66f40 |
|
13-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Set default visibility to protected Set default visibility of symbols to protected. This allows the linker to optimize internal calls and helps avoid plt calls. Make almost all assembly stubs hidden, as -fvisibility does not seem to apply to them. Change the assembly tests accordingly. Also allows to clean up previous hacks to avoid plt calls. Bug: 16974467 Change-Id: I9030dcf6116251f434f94a2b08e56e12085af652
|
63c051a540e6dfc806f656b88ac3a63e99395429 |
|
26-Jul-2014 |
Dave Allison <dallison@google.com> |
Reduce stack usage for overflow checks This reduces the stack space reserved for overflow checks to 12K, split into an 8K gap and a 4K protected region. GC needs over 8K when running in a stack overflow situation. Also prevents signal runaway by detecting a signal inside code that resulted from a signal handler invokation. And adds a max signal count to the SignalTest to prevent it running forever. Also reduces the number of iterations for the InterfaceTest as this was taking (almost) forever with the --trace option on run-test. Bug: 15435566 Change-Id: Id4fd46f22d52d42a9eb431ca07948673e8fda694 Conflicts: compiler/optimizing/code_generator_x86_64.cc runtime/arch/x86/fault_handler_x86.cc runtime/arch/x86_64/quick_entrypoints_x86_64.S
|
648d7112609dd19c38131b3e71c37bcbbd19d11e |
|
26-Jul-2014 |
Dave Allison <dallison@google.com> |
Reduce stack usage for overflow checks This reduces the stack space reserved for overflow checks to 12K, split into an 8K gap and a 4K protected region. GC needs over 8K when running in a stack overflow situation. Also prevents signal runaway by detecting a signal inside code that resulted from a signal handler invokation. And adds a max signal count to the SignalTest to prevent it running forever. Also reduces the number of iterations for the InterfaceTest as this was taking (almost) forever with the --trace option on run-test. Bug: 15435566 Change-Id: Id4fd46f22d52d42a9eb431ca07948673e8fda694
|
d74824bdd01b2a76b310e1275a1114d39833a708 |
|
12-Aug-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix art_quick_string_compareto. Though __memcmp16() is implemented in the same module as the caller, it is still possible that the toolchain would put __memcmp16() into plt. In that case, IP registers can be trashed when loading the function address. Use x14/x15 to replace IP0/IP1. Bug: 16974467 (cherry picked from commit 62ddb328860e907eb76ccd3abed63ba75438fea8) Change-Id: I40e39d075860bc78624ce6ef8b4f8e33e57fc58c
|
62ddb328860e907eb76ccd3abed63ba75438fea8 |
|
12-Aug-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix art_quick_string_compareto. Though __memcmp16() is implemented in the same module as the caller, it is still possible that the toolchain would put __memcmp16() into plt. In that case, IP registers can be trashed when loading the function address. Use x14/x15 to replace IP0/IP1. Bug: 16974467 Change-Id: Ica7294b9bf90342031efa5fd51a86a6fcab5852b
|
7204c04dd86ae8ce05690e38737b2abf017a0a69 |
|
11-Jun-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Implicit StackOverflow/NPE/Suspend checks. This implements implicit stack overflow checks and null pointer exceptions for AArch64. Suspend checks are implemented but not switched on yet. Bug: 16256184 Change-Id: I2eb076f2c0c9d94793d5a898fea49cf409b4eb66 Signed-off-by: Stuart Monteith <stuart.monteith@arm.com>
|
d5c78f44dc53ef9fda47a95ad3e9799be850c2b2 |
|
11-Jun-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Implicit StackOverflow/NPE/Suspend checks. This implements implicit stack overflow checks and null pointer exceptions for AArch64. Suspend checks are implemented but not switched on yet. Change-Id: I2eb076f2c0c9d94793d5a898fea49cf409b4eb66 Signed-off-by: Stuart Monteith <stuart.monteith@arm.com>
|
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
|
ab088118d33caafb00815ab72ac0fd7374169f64 |
|
14-Jul-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add read barriers for the roots in Runtime. Bug: 12687968 Change-Id: If26518a8251702cfe4d5cd7d1f50e80e342704cf
|
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
|
86797a791d692f81def5c1b5f0918992c49ed122 |
|
19-Jun-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Add memcmp16() for Arm64; ensure xSELF not clobbered This patch modifies memcmp() to memcmp16(). Please note that this implementation of memcmp16() is based on the bionic's memcmp(). However, to reflect a recent specification change, the file has been modified to respect the new String.compareTo() behavior. A test for memcmp16() has been added. The string_compareto test in stub_test has been changed to invoke __memcmp16 in assembly stubs. Add artIsAssignableFromCode to the list of native downcalls to store and reload x18. Remove CheckSuspendFromCode, as it is unused. Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com> Change-Id: Ie0b5425ecfb62906d29a5d02e84c7e07ffb34a11
|
70f8d4b107e1f87c23df51efa360b3f4e90bce91 |
|
19-Jun-2014 |
Sebastien Hertz <shertz@google.com> |
Fix art_quick_instrumentation_exit for ARM64 Stores the integer result in x0 into the stack. Also avoids clobbering integer result in x0 by setting it to xSELF after copying it to x2 when calling the artInstrumentationMethodExitFromCode function. Bug: 15690361 Change-Id: I9fb873cf32f194779f299607dda8a7316a99c528
|
0210d11658becc2bf02fe79788c87276a857d0e9 |
|
16-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add transition assembly to wrapper native functions. There is slight difference between managed code ABI and AAPCS. We can make managed code ABI to be the same with AAPCS. But considering that, we might introduce more differences later for performance. It is better to have a wrapper to deal with the differences. Change-Id: I46ced072e9e3a83f713d2bf86fa478fc6144ee81
|
6aac355810d83babbd834df07cf1a38f44ad11c2 |
|
09-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add initialize_type stubs for ARM64; indexof test Add down-call stubs for ARM64. Add a test for indexof in stub_test. Change-Id: I7bc045e29e4ca11ded5b318c47544edc1266afdb
|
4d0589c90971e19c25894414ae7da579269e1fe2 |
|
11-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Move __memcmp16 from Bionic to ART Handle __memcmp16 / MemCmp16 in ART. Import assembly implementations for arm and mips from Bionic. Use a generic C version for all other platforms. Removes the memcmp16 quick entrypoint, as it is never used. Bump the oat version and update thread.cc and checks to reflect the structural change. Change-Id: I54a5a1da2a0a43ef271c8aeda0bf2276b8b11ac6
|
169489b4f4be8c5dd880ba6f152948324d22ff79 |
|
11-Jun-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Add support for inlined methods This patch adds support for Arm64 inlined methods. Change-Id: Ic6aeed6d2d32f65cd1e63cf482f83cdcf958798a
|
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>
|
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
|
d1e9167713e485d9264e856b68ffb568f22f1dc9 |
|
03-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix an error in proxy_invoke stub on ARM64 Make sure that d0 is filled with the right value, as the return from C code is always in x0. Bug: 15386201 Change-Id: I6c048b3d92272d769f1de3bdc9ce30733b9e1935
|
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
|
48241e786121e1c4c050d9cfad3d22de270a3e75 |
|
23-May-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add suspend check in managed code. TODO: Remove x19 in the frame in runtime, generic jni, compiled jni. Change-Id: Ibdc292c9e7adb3a5d3eff353c22f60ffc101f549
|
ed65c5e982705defdb597d94d1aa3f2997239c9b |
|
22-May-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Enable LONG_* and INT_* opcodes. This patch fixes some of the issues with LONG and INT opcodes. The patch has been tested and passes all the dalvik tests except for 018 and 107. Change-Id: Idd1923ed935ee8236ab0c7e5fa969eaefeea8708 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
|
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
|
6cf80102b5f308f2a5326869343ea0d19109a7fb |
|
19-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix ARM64 long-jump context caller-save smashes In aarch64, d8-d15 are callee-saved. We smashed exactly the wrong registers. Add code to stub_test that checks whether the callee-saved fp registers are preserved on ARM64. There are no callee-saved registers for x86, so the invoke methods are not extended for those architectures. Fix a minor type in callee-save frame setup for ARM64. Bug: 14160872 Change-Id: I080fce6eda7d560b4efb610f0e9454f3471fa4f9
|
675967d981a3d17aaedf4ca6e07cc3a76e066921 |
|
15-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix comments for dmb Update the comments to mention correct barrier type. Bug: 14680557 Change-Id: I26df43078c189cf16cc65e99b851981cbd063017
|
421c53742610c053543f8c84e04d5e0c5185d68c |
|
14-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Address comments from HandleScope change. For: https://android-review.googlesource.com/#/c/93793 Change-Id: I020d22a1508bf4f1770e6806d70e4fbb9a0fa0ab
|
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
|
4fc046e78efbc98541388cdda986b5d8a2b951ad |
|
07-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add lock and unlock stubs for ARM64, fix for X86-64 Basic translation of ARM stubs using dmb memory barrier. Fix placement of dmb in unlock_object of ARM and ARM64. Update lock and unlock tests in stub_test to force fat locks. Fix X86-64 unlock stub. Change-Id: Ie2e4328d9631e06843115888644e75fde8b319ee
|
dfd891a61a1642b3c0d532e0cec73255cf4b9afb |
|
30-Apr-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Fixing and adding arm64 trampolines. Fixed art_quick_resolution_trampoline for Arm64. Also added art_quick_initialize_static_storage and art_quick_resolve_string. Change-Id: I8a03ed8dd4e23e26e9974209e1da939361125e0c
|
63206f3038d3d6e1cb24166726613808a4b0ad8c |
|
07-May-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Fix the usage of Thread Register for arm64 This patch cleans-up the usage of x18 as TR for Arm64. As described in the Arm64 Procedure Call Standard, the recommended usage for x18 is to carry inter-procedural state (i.e. ART thread information). However, since x18 is a temporary register there is no guarantee that on calls to external functions x18 is preserved. Thus on JNI calls we need to save and restore x18 before coming back to managed runtime. For the JNI compiler trampoline we move x18 (temporary register - caller saved) to x19 (ETR, callee saved) before calling into native code, and restore it on the way back. Change-Id: If24091018d640027a497517a9238bf4a80d013aa Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
|
6e4e59c674f4d58421512dbcfc57a99e27b6b5c8 |
|
06-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: ARM64 field entrypoints Add Quick field entrypoints for ARM64. Add tests to stub_test. Make inline assembly more robust to compiler choices for registers on ARM. Change-Id: I199edfad5dd9b73c6f6fc8a572ff4e0e0c04921d
|
266340d30a2ed52a4ea0ff64492d6aac857a3e24 |
|
02-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: ARM64 art_quick_string_compareto A simple implementation of the assembly stub for ARM64. Make the string_compareto test in stub_test more interesting by having strings with offsets in their backing arrays. Change-Id: Ibc3a1bdb70e3764baa6b8e793987166c67b6fb39
|
f4e910badbaa5aa48efbf697715f4815f0ebc7e4 |
|
30-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Implement art_quick_aput_object stubs for X86-64 and ARM64 Implement the aput_object stubs for 64b architectures and enable their testing in stub_test. Fix missing @PLT for x86. Add automatic _local labels in function definitions in x86-64 so we can make local jumps (instead of PLT hoops). Change-Id: I614b88fd5966acd8a564b87c47d4c50ee605320c
|
00c1e6d5fa6c2c20f25c38591b9780114bf7ddbf |
|
26-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Add ARM64 & X86_64 Assembly, plus tests This adds assembly code or removes UNTESTED annotation from TWO_ARG_DOWNCALLand THREE_ARG_DOWNCALL macros and supporting code, generating working allocation stubs. Some object and array allocation tests are added to the stub_test. Change-Id: I5e93b7543c1e6dbd33b0d4cf564c7cbd963e74ef
|
5c1e4352614d61fed6868567e58b96682828cb4d |
|
22-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Add "arch_test" gtest for assembly stub constants, add some ARM64 assembly code Add a test that (1) checks all callee-save method frame sizes for all architectures, (2) checks thread offsets for the runtime architecture and (3) checks callee-save method offsets for the runtime architecture. The "asm_support_XXX.h" files now only contain definitions that are common between all architectures. Architecture-specific definitions (i.e., special registers names) have been pushed into the corresponding .S file. This change was required to be able to undefine definitions in the test, so that multiple tests can be written in one file. Test (1) above is in a sense two-stage. The arch_test gtest compares constants (if it finds them) against the frame size as reported by the ArtMethods created by the Runtime. This works for all architectures as we can provide the instruction-set to CreateCalleeSaveMethod. The second stage of the "test" are preprocessor tests with "#error" in the case that the constants are not the expected value. Optimally I'd like to change that to an actual runtime test exercising the assembly code, which would also allow to check whether the right registers are stored. Also added missing assembly code for ARM64 for the callee-save macros. Also fix X86_64 compilation for Clang 3.5. Change-Id: I018e6433dffd3d31ba3bfcd75661653f4c7b6552
|
525cde2dd7cc7ad4212765ad3975cf260a934d3e |
|
23-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Add a GTest for Assembly Stubs, Add some ARM64 and X86-64 Stubs This GTest adds some runtime testing for the stubs that does not rely on the compiler. This should allow to add or update the stubs and do testing, especially on architectures without working compiler. This test is a bit dangerous: if it doesn't know how to handle an architecture, it will only log a warning. This is so that testing does not break at the moment. The warning is forced to stdout, too, so that it is always visible. Add art_quick_check_cast to ARM64 and X86-64. Add art_quick_memcpy to X86-64. The latter should be removed in a good compiler, as it is practically only overhead. Add minor CFI information in ARM. Change-Id: Ia9c6d0f4035eb1527c12b5f6067dece59e25528d
|
75b9113b2b0a5807043af2a669a93d1579af8e2c |
|
09-Apr-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Jni compiler fixes This patch fixes some of the issues with the ARM64 assembler and JNI compiler. The JNI compiler is not enabled by default, yet. To enable, change line 1884 in compiler/driver/compiler_driver.cc, removing kArm64 from the GenericJNI list. The compiler passes all tests in jni_compiler_test. Also change the common_compiler_test instruction-set-features logic. We allow tests when the build-time features are a subset of the runtime features. Dex2oat cross-compiling is now working. A 32b version of dex2oat should be able to compile correctly. Change-Id: I51d1c24f2c75d4397a11c54724a8b277ff3b3df8 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
|
03906cffb1a59931c1c871ac3a0ffb1c4476bbb4 |
|
07-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Fix ARM64 invoke stubs, correct CFI directives The stubs do not advance over the arguments array when they cannot place the parameter in a register. Fixed. Changed the frame code for the invoke stubs so that CFI is easier to apply. Also defined two macros to unite the parts that are identical between static and dynamic invoke. With moving one statement and accepting 12B increased (dead) code size one could almost fully unite the implementations. Corrected CFI directives for the CALLEE_SAVE macros. Change-Id: Idf593fc46f0b6e1eb579010d0cdcf9c1a71730b1
|
e62a07eac9ba2bef01f373832dd810a2cee9f348 |
|
26-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Last patch for running tests on ARM64 This allows all run-tests to succeed with the interpreter+GenJNI setup. Change-Id: I45734e7e57340439369a613ef4329e3be2c0c4c9
|
c6ee54e9a9fd67d24c63bd802ef2fe540a4f86a5 |
|
25-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Trampoline and assembly fixes for ARM64 Trampolines need a jump, not a call. Expose br in the ARM64 assembler to allow this. The resolution trampoline is called with the Quick ABI, and will continue to a Quick ABI function. Then the method pointer must be in x0. Change-Id: I4e383b59d6c40a659d324a7faef3fadf0c890178
|
9de65ff3a9c49b91d80be292020f012f3d0a24ef |
|
22-Mar-2014 |
Andreas Gampe <agampe@google.com> |
Fixes to mem_map wraparound and ARM64 quick_invoke assembly There are only 6 free GPRs for passing in a non-static invoke. This corrupted one register for long-signature methods. The wrap-around did not actually wrap around correctly. Change-Id: I62658dadeb83bb22960b9455e211d26ffaa20f6f
|
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
|