summaryrefslogtreecommitdiffstats
path: root/compiler/utils/x86/assembler_x86.cc
Commit message (Collapse)AuthorAgeFilesLines
* Move mirror::ArtMethod to nativeMathieu Chartier2015-06-021-11/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* ART: x86 indexOf intrinsics for the optimizing compilerAndreas Gampe2015-05-111-0/+8
| | | | | | | | Add intrinsics implementations for indexOf in the optimizing compiler. These are mostly ported from Quick. Add instruction support to assemblers where necessary. Change-Id: Ife90ed0245532a5c436a26fe84715dc357f353c8
* Revert "Revert "Revert "Revert "[optimizing] Improve x86 shifts""""Mark P Mendell2015-05-041-11/+59
| | | | | | | | | This reverts commit 2a7a1d7808f003bea908023ebd11eb442d2fca39. Fix the problem that a long long >> 63 got the wrong answer. The problem was that a shr was used instead of a sar. Change-Id: I0327f79c718016ddec9272a605fc50ec15ec4566
* Revert "Revert "Revert "[optimizing] Improve x86 shifts"""Roland Levillain2015-04-291-59/+11
| | | | | | | | | | | | | | | | | | | | This reverts commit 9b95a057ee20e4b1ca2e9c663726482172dc9ba3. Reverting this CL as it breaks libcore tests: org.apache.harmony.tests.java.lang.DoubleTest#test_compare junit.framework.AssertionFailedError: compare() -0.0 should be less 0.0 at junit.framework.Assert.assertTrue(Assert.java:140) at org.apache.harmony.tests.java.lang.DoubleTest.test_compare(DoubleTest.java:258) org.apache.harmony.tests.java.lang.DoubleTest#test_compare FAIL (EXEC_FAILED) org.apache.harmony.tests.java.lang.DoubleTest#test_compareToLjava_lang_Double junit.framework.AssertionFailedError: Assert 2: compare() -0.0 should be less 0.0 at junit.framework.Assert.assertTrue(Assert.java:140) at org.apache.harmony.tests.java.lang.DoubleTest.test_compareToLjava_lang_Double(DoubleTest.java:1320) org.apache.harmony.tests.java.lang.DoubleTest#test_compareToLjava_lang_Double FAIL (EXEC_FAILED) Change-Id: I10f0ec8cc9495cc225fef1940b3f1a9fe87d996f
* Revert "Revert "[optimizing] Improve x86 shifts""Roland Levillain2015-04-291-11/+59
| | | | | | | | | This reverts commit f9aac1e9f442c2486cd54f045d43e15791601205. Don't use Location::Any() for the first input if the output is Location::SameAsFirstInput(). Change-Id: I400834052b114abf0d616da1b4b6506f7bba10ab
* Exercise the x86 and x86-64 FILD and FISTP instructions.Roland Levillain2015-04-131-0/+7
| | | | | | | | | | | | | | | | | | - Ensure the double- and quadword x87 (FPU) instructions for integer loading (resp. fildl and fildll) are properly generated by the x86 and x86-64 generators (resp. X86Assembler::filds/X86_64Assembler::filds and X86Assembler::fildl/X86_64Assembler::fildl). - Ensure the double- and quadword x87 (FPU) instructions for integer storing & popping (resp. filstpl and fistpll) are properly generated by the x86 and x86-64 generators (resp. X86Assembler::fistps/X86_64Assembler::fistps and X86Assembler::fistpl/X86_64Assembler::fistpl). These instructions can be used in the implementation of the long-to-float and long-to-double Dex type conversions. Change-Id: Iade52a9aee326d189d77d3dbd352a2b5dab52e46
* Merge "Revert "Optimizing: Fix long-to-fp conversion on x86.""Nicolas Geoffray2015-04-131-7/+0
|\
| * Revert "Optimizing: Fix long-to-fp conversion on x86."Nicolas Geoffray2015-04-131-7/+0
| | | | | | | | | | | | | | | | Test fails on arm. This reverts commit 2d45b4df3838d9c0e5a213305ccd1d7009e01437. Change-Id: Id2864917b52f7ffba459680303a2d15b34f16a4e
* | Merge "Optimizing: Fix long-to-fp conversion on x86."Roland Levillain2015-04-131-0/+7
|\|
| * Optimizing: Fix long-to-fp conversion on x86.Serguei Katkov2015-04-131-0/+7
| | | | | | | | | | | | | | | | long-to-fp conversion implemented using SSE loses the precision. The test is included. CL uses FPU to provide the correct result. Change-Id: I8eaf3c46819a8cb52642a7e7d7c4e3e0edbc88db Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
* | Revert "[optimizing] Improve x86 shifts"Roland Levillain2015-04-101-59/+11
| | | | | | | | | | | | | | | | This reverts commit 222fcf96c9b73bbb739012575e7e413caf9348ec. Reverting this CL as it is breaking a few tests (see http://build.chromium.org/p/client.art/builders/host-x86/builds/3251/steps/test%20optimizing/logs/stdio). Will investigate ASAP. Change-Id: Iddd8363e83a24aa49fbdf0f0c9dc12e63b4848de
* | [optimizing] Improve x86 shiftsMark Mendell2015-04-101-11/+59
| | | | | | | | | | | | | | | | Support memory operands for integer shifts. Generate better code for long shifts by constants. Change-Id: Icc92fa1b59cc280d4894af6f054e19b01977d5ce Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* | Merge "Implement CFI for JNI."David Srbecky2015-04-091-3/+21
|\ \ | |/ |/|
| * Implement CFI for JNI.David Srbecky2015-04-081-3/+21
| | | | | | | | | | | | CFI is necessary for stack unwinding in gdb, lldb, and libunwind. Change-Id: I37eb7973f99a6975034cf0e699e138c3a9aba10f
* | Merge "[optimizing] Implement more x86/x86_64 intrinsics"Andreas Gampe2015-04-081-0/+9
|\ \ | |/ |/|
| * [optimizing] Implement more x86/x86_64 intrinsicsMark Mendell2015-04-061-0/+9
| | | | | | | | | | | | | | | | | | | | Implement CAS and bit reverse and byte reverse intrinsics that were missing from x86 and x86_64 implementations. Add assembler tests and compareAndSwapLong test. Change-Id: Iabb2ff46036645df0a91f640288ef06090a64ee3 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* | Remove the old CFI infrastructure.David Srbecky2015-04-071-52/+9
|/ | | | Change-Id: I12a17a8a1c39ffccaa499c328ebac36e4d74dc4e
* [optimizing] Implement x86/x86_64 math intrinsicsMark Mendell2015-04-011-0/+22
| | | | | | | | | | | | | | | | | | | Implement floor/ceil/round/RoundFloat on x86 and x86_64. Implement RoundDouble on x86_64. Add support for roundss and roundsd on both architectures. Support them in the disassembler as well. Add the instruction set features for x86, as the 'round' instruction is only supported if SSE4.1 is supported. Fix the tests to handle the addition of passing the instruction set features to x86 and x86_64. Add assembler tests for roundsd and roundss to x86_64 assembler tests. Change-Id: I9742d5930befb0bbc23f3d6c83ce0183ed9fe04f Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* [optimizing] Implement X86 intrinsic supportMark Mendell2015-03-261-0/+62
| | | | | | | | | | | Implement the supported intrinsics for X86. Enhance the graph visualizer to print <U> for unallocated locations, to allow calling the graph dumper from within register allocation for debugging purposes. Change-Id: I3b0319eb70a9a4ea228f67065b4c52d13a1ae775 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* Revert "Revert "[optimizing] Enable x86 long support.""Nicolas Geoffray2015-03-111-0/+30
| | | | | | This reverts commit 154552e666347d41d95d7619c6ee56249ff4feca. Change-Id: Idc726551c249a888b7ff5fde8508ae50e81b2e13
* Revert "[optimizing] Enable x86 long support."Nicolas Geoffray2015-03-061-30/+0
| | | | | | | | Few libcore failures. This reverts commit b4ba354cf8d22b261205494875cc014f18587b50. Change-Id: I4a28d853e730dff9b69aec9555505803cf2fcd63
* [optimizing] Enable x86 long support.Nicolas Geoffray2015-03-061-0/+30
| | | | Change-Id: I9006972a65a1f191c45691104a960366747f9d16
* ART: Templatize IsInt & IsUintAndreas Gampe2015-02-181-2/+2
| | | | | | Ensure that things are used correctly. Change-Id: I76f082b32dcee28bbfb4c519daa401ac595873b3
* Small optimization for recursive calls: avoid dex cache.Nicolas Geoffray2015-01-291-1/+2
| | | | Change-Id: I044757a2f06e535cdc1480c4fc8182b89635baf6
* Revert "Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)""Mark P Mendell2015-01-271-6/+21
| | | | | | | | | | 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
* Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)"Vladimir Marko2015-01-271-21/+6
| | | | | | | | | | | | | And the 3 Mac build fixes. Fix conflicts in context_x86.* . This reverts commits 3d2c8e74c27efee58e24ec31441124f3f21384b9 , 34eda1dd66b92a361797c63d57fa19e83c08a1b4 , f601d1954348b71186fa160a0ae6a1f4f1c5aee6 , bc503348a1da573488503cc2819c9e30807bea31 . Bug: 19150481 Change-Id: I6650ee30a7d261159380fe2119e14379e4dc9970
* ART: Implement X86 hard float (Quick/JNI/Baseline)Mark Mendell2015-01-231-6/+21
| | | | | | | | | | | | | | | | | 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>
* [optimizing compiler] Implement inline x86 FP '%'Mark Mendell2015-01-211-0/+36
| | | | | | | | | | | | | | Replace the calls to fmod/fmodf by inline code as is done in the Quick compiler. Remove the quick fmod/fmodf runtime entries, as they are no longer in use. 64 bit code generator Move() routine needed to be enhanced to handle constants, as Location::Any() allows them to be generated. Change-Id: I6b6a42f6faeed4b0b3c940453e487daf5b25d184 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
* Revert "ART: Implement hard float for X86"Vladimir Marko2015-01-121-21/+6
| | | | | | This reverts commit 59b9cf7ec0ccc13df91be0bd5c723b8c52410739. Change-Id: I08333b528032480def474286dc368d916a07e17f
* ART: Implement hard float for X86Mark Mendell2015-01-121-6/+21
| | | | | | | | | | | | | | 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>
* ART: Remove unused parts of x86 assemblersAndreas Gampe2015-01-061-32/+0
| | | | | | These functions are neither used nor functional. Change-Id: Ib6d0761388a45662ad9448ceb2c539c6f0b77f23
* [optimizing compiler] Add support for volatileCalin Juravle2014-12-191-0/+21
| | | | | | | | | | | | - for backends: arm, x86, x86_64 - added necessary instructions to assemblies - clean up code gen for field set/get - fixed InstructionDataEquals for some instructions - fixed comments in compiler_enums * 003-opcode test verifies basic volatile functionality Change-Id: I144393efa312dfb2c332cb84056b00edffee338a
* Revert "Don't block quick callee saved registers for optimizing."Nicolas Geoffray2014-12-181-2/+2
| | | | | | | | | X64 has one libcore test failing, and codegen_test on arm is failing. This reverts commit 6004796d6c630696127df2494dcd4f30d1367a34. Change-Id: I20e00431fa18e11ce4c0cb6fffa91977fa8e9b4f
* Don't block quick callee saved registers for optimizing.Nicolas Geoffray2014-12-181-2/+2
| | | | | | | | | | | | This change builds on: https://android-review.googlesource.com/#/c/118983/ - Also fix x86_64 assembler bug triggered by this change. - Fix (and improve) x86's backend byte register usage. - Fix a bug in baseline register allocator: a fixed out register must prevent inputs from allocating it. Change-Id: I4883862e29b4e4b6470f1823cf7eab7e7863d8ad
* Merge "[optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}"Calin Juravle2014-11-271-0/+17
|\
| * [optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}Calin Juravle2014-11-271-0/+17
| | | | | | | | | | | | | | | | | | | | Adds: - float comparison for arm, x86, x86_64 backends. - ucomis{s,d} assembly to x86 and x86_64. - vmstat assebmly for thumb2 - new assembly tests Change-Id: Ie3e19d0c08b3b875cd0a4be4ee4e9c8a4a076290
* | Add support for long-to-double in the optimizing compiler.Roland Levillain2014-11-271-4/+10
|/ | | | | | | | | | | | | | | | - Add support for the long-to-double Dex instruction in the optimizing compiler. - Enable requests of temporary FPU (double) registers during code generation. - Fix art::x86::X86Assembler::LoadLongConstant and extend it to int64_t values. - Have art::x86_64::X86_64Assembler::cvtsi2sd work with 64-bit operands. - Generate x86, x86-64 and ARM (but not ARM64) code for long to double HTypeConversion nodes. - Add related tests to test/422-type-conversion. Change-Id: Ie73d9e5e25bd2e15f585c371e8fc2dcb83438ccd
* Revert "[optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}"Calin Juravle2014-11-261-17/+0
| | | | | | | | Fails on arm due to missing vmrs op after vcmp. I revert this instead of pushing the fix because I don't understand yet why it compiles with run-test but not with dex2oat. This reverts commit fd861249f31ab360c12dd1ffb131d50f02b0bfc6. Change-Id: Idc2d30f6a0f39ddd3596aa18a532ae90f8aaf62f
* [optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}Calin Juravle2014-11-261-0/+17
| | | | | | | - adds float comparison for arm, x86, x86_64 backends. - adds ucomis{s,d} assembly to x86 and x86_64. Change-Id: I232d2b6e9ecf373beb5cc63698dd97a658ff9c83
* Revert "[optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}"Nicolas Geoffray2014-11-261-17/+0
| | | | | | | | Fails on x86_64 and target. This reverts commit cea28ec4b9e94ec942899acf1dbf20f8999b36b4. Change-Id: I30c1d188c7ecfe765f137a307022ede84f15482c
* [optimizing compiler] Add CMP{L,G}_{FLOAT,DOUBLE}Calin Juravle2014-11-261-0/+17
| | | | | | | - adds float comparison for arm, x86, x86_64 backends. - adds ucomis{s,d} assembly to x86 and x86_64. Change-Id: Ie91e04bfb402025073054f3803a3a569e4705caa
* [optimizing compiler] Add shiftsCalin Juravle2014-11-241-1/+11
| | | | | | Added SHL, SHR, USHR for arm, x86, x86_64. Change-Id: I971f594e270179457e6958acf1401ff7630df07e
* Fix the last users of TARGET_CPU_SMP.Elliott Hughes2014-11-191-2/+0
| | | | | | Everyone else assumes SMP. Change-Id: I7ff7faef46fbec6c67d6e446812d599e473cba39
* Implement and/or/xor in optimizing.Nicolas Geoffray2014-11-121-0/+23
| | | | Change-Id: I7cf6da1fd334a7177a5580931b8f174dd40b7cec
* stdint types all the way!Ian Rogers2014-10-091-4/+4
| | | | Change-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08
* Add support for floats and doubles.Nicolas Geoffray2014-10-071-0/+8
| | | | | | | - Follows Quick conventions. - Currently only works with baseline register allocator. Change-Id: Ie4b8e298f4f5e1cd82364da83e4344d4fc3621a3
* Fix movw on x86/x86_64 to accept any 16bits immediate.Nicolas Geoffray2014-10-071-1/+1
| | | | Change-Id: I282eece0cd497431f207cec61852b4585ed3655c
* Add a prepare for register allocation pass.Nicolas Geoffray2014-10-061-0/+11
| | | | | | | | | | - Currently the pass just changes the uses of checks to the actual values. - Also optimize array access, now that inputs can be constants. - And fix another bug in the register allocator reveiled by this change. Change-Id: I43be0dbde9330ee5c8f9d678de11361292d8bd98
* Optimize suspend checks in optimizing compiler.Nicolas Geoffray2014-09-251-0/+8
| | | | | | | | | | - Remove the ones added during graph build (they were added for the baseline code generator). - Emit them at loop back edges after phi moves, so that the test can directly jump to the loop header. - Fix x86 and x86_64 suspend check by using cmpw instead of cmpl. Change-Id: I6fad5795a55705d86c9e1cb85bf5d63dadfafa2a
* ART source line debug info in OAT filesYevgeny Rouban2014-08-151-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | OAT files have source line information enough for ART runtime needs like jump to/from interpreter and thread suspension. But this information is not enough for finer grained source level debugging and low-level profiling (VTune or perf). This patch adds to OAT files two additional sections: .debug_line - DWARF formatted Elf32 section with detailed source line information (mapping from native PC to Java source lines). In addition to the debugging symbols added using the dex2oat option --include-debug-symbols, the source line information is added to the section .debug_line. The source line info can be read by many Elf reading tools like objdump, readelf, dwarfdump, gdb, perf, VTune, ... gdb can use this debug line information in x86. In 64-bit mode the information can be used if the oat file is mapped in the lower address space (address has higher 32 bits zeroed). Relocation works. Testing: 1. art/test/run-test --host --gdb [--64] 001-HelloWorld 2. in gdb: break Main.java:19 3. in gdb: break Runtime.java:111 4. in gdb: run - stops at void java.lang.Runtime.<init>() 5. in gdb: backtrace - shows call stack down to main() 6. in gdb: continue - stops at void Main.main() (only in 32-bit mode) 7. in gdb: backtrace - shows call stack down to main() 8. objdump -W <oat-file> - addresses are from VMA range of .text section reported by objdump -h <file> 9. dwarfdump -ka <oat-file> - no errors expected Size of aosp-x86-eng boot.oat increased by 11% from 80.5Mb to 89.2Mb with two sections added .debug_line (7.2Mb) and .rel.debug (1.5Mb). Change-Id: Ib8828832686e49782a63d5529008ff4814ed9cda Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>