summaryrefslogtreecommitdiffstats
path: root/compiler
Commit message (Collapse)AuthorAgeFilesLines
* ART: Optimizing compiler intrinsicsAndreas Gampe2015-01-1522-75/+1873
| | | | | | | | | Add intrinsics infrastructure to the optimizing compiler. Add almost all intrinsics supported by Quick to the x86-64 backend. Further intrinsics require more assembler support. Change-Id: I48de9b44c82886bb298d16e74e12a9506b8e8807
* Merge "[optimizing compiler] Compute live spill size"Nicolas Geoffray2015-01-158-15/+46
|\
| * [optimizing compiler] Compute live spill sizeMark Mendell2015-01-158-15/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current stack frame calculation assumes that each live register to be saved/restored has the word size of the machine. This fails for X86, where a double in an XMM register takes up 8 bytes. Change the calculation to keep track of the number of core registers and number of fp registers to handle this distinction. This is slightly pessimal, as the registers may not be active at the same time, but the only way to handle this would be to allocate both classes of registers simultaneously, or remember all the active intervals, matching them up and compute the size of each safepoint interval. Change-Id: If7860aa319b625c214775347728cdf49a56946eb Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* | ART: Allow scoped adjustments to log verbosityAndreas Gampe2015-01-152-1/+9
| | | | | | | | | | | | | | | | | | Add ScopedLogSeverity to adjust the logging level. Suppress warnings by default in gtests. Suppress errors in instances where errors are expected. Change-Id: If3ef865813e9505ab60bc90baed63ff11d90afbb
* | Merge "ART: dex2oat flag for HGraphVisualizer dump file"David Brazdil2015-01-155-5/+14
|\ \
| * | ART: dex2oat flag for HGraphVisualizer dump fileDavid Brazdil2015-01-135-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a new '--dump-cfg=<file>' flag to dex2oat which specifies the file that HGraphVisualizer will store its output into. Until now the graph was dumped to 'art.cfg' in the current working directory. To make Checker work with run-test, the output directory needs to be customizable. Change-Id: I4a940f7708b88deea5a0e51d13aed13e52199349
| * | Revert "ART: dex2oat flag for HGraphVisualizer dump file"Andreas Gampe2015-01-133-12/+3
| | | | | | | | | | | | | | | | | | | | | | | | Breaks compilation of tests. This reverts commit 54953dfdcb3bb8896d8af2d20adef84fb740ce77. Change-Id: I868b876c3130be61f1169c5fccdffc0368bee11e
* | | Merge "ART: Clean assembler_test disassemblies"Andreas Gampe2015-01-141-6/+10
|\ \ \
| * | | ART: Clean assembler_test disassembliesAndreas Gampe2015-01-141-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | Add a flag. Enable commented-out code. Change-Id: Ife17b72f2b93c128992d757e58b0e51431a3edf8
* | | | ART: Fix indentation in Mips backendAndreas Gampe2015-01-145-90/+91
|/ / / | | | | | | | | | | | | | | | Fix the indentation to be standard. Change-Id: I39a16716be3429dfef6df0a585e24423b46363a2
* | | Merge "Use unique_ptr to track ownership of dex files."Richard Uhler2015-01-142-24/+26
|\ \ \
| * | | Use unique_ptr to track ownership of dex files.Richard Uhler2015-01-132-24/+26
| | | | | | | | | | | | | | | | | | | | Bug: 18809837 Change-Id: Ie571eae8fc19ee9207390cff5c7e2a38071b126a
* | | | Merge "Remove constant moves after emitting them in parallel resolver."Nicolas Geoffray2015-01-143-6/+32
|\ \ \ \
| * | | | Remove constant moves after emitting them in parallel resolver.Nicolas Geoffray2015-01-143-6/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the case where a constant move requires a scratch register. Note that there is no backend that needs this for now, but X86 might with the move to hard float. Change-Id: I37f6b8961b48f2cf6fbc0cd281e70d58466d018e
* | | | | Merge "Fix wide volatile IGET/IPUT on ARM without atomic ldrd/strd."Vladimir Marko2015-01-142-14/+12
|\ \ \ \ \
| * | | | | Fix wide volatile IGET/IPUT on ARM without atomic ldrd/strd.Vladimir Marko2015-01-142-14/+12
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If ldrd/strd isn't atomic, IPUT_WIDE uses ldrexd+strexd and we need to record the safepoint for the ldrexd rather than strexd. IGET_WIDE was simply missing the memory barrier. Bug: 18993519 Change-Id: I4e9270b994f413c1a047c1c4bb9cce5f29e42cb4
| * | | | ART: dex2oat flag for HGraphVisualizer dump fileDavid Brazdil2015-01-133-3/+12
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a new flag to dex2oat which allows to specify the name of the file that HGraphVisualizer will store its output into. Until now the graph was dumped to "art.cfg" in the current working directory. To make Checker work with run-test, the output directory needs to be customizable. Change-Id: I395c518b987e594e89e5e80f202a96befa41ac20
* | | | Merge "Implement ParallelMoveResolver::Swap for doubles on arm."Nicolas Geoffray2015-01-141-5/+35
|\ \ \ \ | |_|/ / |/| | |
| * | | Implement ParallelMoveResolver::Swap for doubles on arm.Nicolas Geoffray2015-01-141-5/+35
| |/ / | | | | | | | | | | | | | | | Currently reserve a global register DTMP for these operations. Change-Id: Ie88b4696af51834492fd062082335bc2e1137be2
* | | Remove whitespace.Nicolas Geoffray2015-01-141-2/+2
| | | | | | | | | | | | Change-Id: I82f51cff87765a3aeeb861d2ae64978f2e762c73
* | | Merge "Skip r1 on arm if first parameter is a long."Nicolas Geoffray2015-01-144-9/+25
|\ \ \
| * | | Skip r1 on arm if first parameter is a long.Nicolas Geoffray2015-01-134-9/+25
| | |/ | |/| | | | | | | Change-Id: I16d927ee0a0b55031ade4c92c0095fd74e18ed5b
* | | ART: Use jalr instead of jr for MipsAndreas Gampe2015-01-134-11/+11
| |/ |/| | | | | | | | | Use the jalr instruction instead of jr in stubs and compiled code. Change-Id: Idacc5167a5bb0113dc2e7716e4767e5ed07b5e0b
* | Merge "Revert "ART: Implement hard float for X86""Vladimir Marko2015-01-126-113/+56
|\ \
| * | Revert "ART: Implement hard float for X86"Vladimir Marko2015-01-126-113/+56
| | | | | | | | | | | | | | | | | | This reverts commit 59b9cf7ec0ccc13df91be0bd5c723b8c52410739. Change-Id: I08333b528032480def474286dc368d916a07e17f
* | | Merge "ART: Implement hard float for X86"Vladimir Marko2015-01-126-56/+113
|\| | | |/ |/|
| * ART: Implement hard float for X86Mark Mendell2015-01-126-56/+113
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Fix handling of long argument spanning register/memory.Nicolas Geoffray2015-01-124-47/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Merge "Move code around in OptimizingCompiler::Compile to reduce stack space."Nicolas Geoffray2015-01-123-66/+96
|\ \
| * | Move code around in OptimizingCompiler::Compile to reduce stack space.Nicolas Geoffray2015-01-123-66/+96
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also fix an (intentional) memory leak, by allocating the CodeGenerator on the heap instead of the arena: they construct an Assembler object that requires destruction. BUG:18787334 Change-Id: I8cf0667cb70ce5b14d4ac334bd4487a562635f1b
* | | Merge "Don't overwrite a register input."Nicolas Geoffray2015-01-091-2/+4
|\ \ \
| * | | Don't overwrite a register input.Nicolas Geoffray2015-01-091-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | `addr` is a register input, which can survive the current instruction, therefore we can't overwrite it. Change-Id: I6eaa60e5f91c2b7b9b31673457d2a0d63474e587
* | | | Merge "ART: Refactored regex code in Checker"David Brazdil2015-01-082-112/+112
|\ \ \ \ | |/ / / |/| | |
| * | | ART: Refactored regex code in CheckerDavid Brazdil2015-01-082-112/+112
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | This patch refactors how Checker constructs regular expressions which it uses to parse tests and verify compiler output. It also replaces all occurrences of the '[0-9]+' ID-matching expression with the '\d+' shorthand. Change-Id: I5f854a25707e44ed2fa1673ff084990e8f43e4a2
* | | Merge "ART: Fixed formatting in HGraphVisualizerPrinter"David Brazdil2015-01-081-4/+4
|\ \ \
| * | | ART: Fixed formatting in HGraphVisualizerPrinterDavid Brazdil2015-01-081-4/+4
| |/ / | | | | | | | | | Change-Id: I06d9bb0fc03e13cfc49f2b4da07a0ee2d09a339a
* | | Merge "Add VerifyObject to StackHandleScope::SetReference"Mathieu Chartier2015-01-085-0/+5
|\ \ \
| * | | Add VerifyObject to StackHandleScope::SetReferenceMathieu Chartier2015-01-085-0/+5
| |/ / | | | | | | | | | | | | | | | | | | | | | Helps catch GC bugs. Also moved some of the HandleScope logic to the inl file. Bug: 13054004 Change-Id: I81b9dd717092b6a467fcd28b4df0089ec075dd44
* | | Merge "Implement double and float support for arm in register allocator."Nicolas Geoffray2015-01-0815-67/+480
|\ \ \ | |/ / |/| |
| * | Implement double and float support for arm in register allocator.Nicolas Geoffray2015-01-0815-67/+480
| |/ | | | | | | | | | | | | | | | | | | | | | | The basic approach is: - An instruction that needs two registers gets two intervals. - When allocating the low part, we also allocate the high part. - When splitting a low (or high) interval, we also split the high (or low) equivalent. - Allocation follows the (S/D register) requirement that low registers are always even and the high equivalent is low + 1. Change-Id: I06a5148e05a2ffc7e7555d08e871ed007b4c2797
* | Merge "ART: Add copyright to Optimizing's Inliner test"David Brazdil2015-01-071-0/+16
|\ \ | |/ |/|
| * ART: Add copyright to Optimizing's Inliner testDavid Brazdil2015-01-071-0/+16
| | | | | | | | Change-Id: I10c29d607baa5b8b23b5d998a3c72dafcb7f47b8
* | ART: Fix leak in codegen_testAndreas Gampe2015-01-061-1/+3
| | | | | | | | | | | | Make sure the InstructionSetFeatures isn't leaked. Change-Id: Ide25773500c1513ecb204a380bb0a95513ff7276
* | Merge "ART: Remove LowestSetBit and IsPowerOfTwo"Andreas Gampe2015-01-068-47/+24
|\ \
| * | ART: Remove LowestSetBit and IsPowerOfTwoAndreas Gampe2015-01-068-47/+24
| |/ | | | | | | | | | | | | Remove those functions from Mir2Lir and replace with functionality from utils.h. Change-Id: Ieb67092b22d5d460b5241c7c7931c15b9faf2815
* | Merge "ART: Remove unused parts of x86 assemblers"Andreas Gampe2015-01-064-74/+0
|\ \
| * | ART: Remove unused parts of x86 assemblersAndreas Gampe2015-01-064-74/+0
| |/ | | | | | | | | | | These functions are neither used nor functional. Change-Id: Ib6d0761388a45662ad9448ceb2c539c6f0b77f23
* | Merge "ART: Fix divide-by-zero for ARM"Andreas Gampe2015-01-061-0/+8
|\ \
| * | ART: Fix divide-by-zero for ARMAndreas Gampe2015-01-061-0/+8
| |/ | | | | | | | | | | | | | | There was an infinite loop in the code generation for a divide by literal zero. Bug: 18887754 Change-Id: Ibd481918d3c6d7bc62fdd1a6807042009f561d95
* | Merge "Look at instruction set features when generating volatiles code"Calin Juravle2015-01-066-26/+44
|\ \ | |/ |/|