History log of /art/compiler/utils/mips64/assembler_mips64_test.cc
Revision Date Author Comments
a556e6ba500ba54d1ca90d6a947dd962d9c287c7 13-Dec-2017 Lena Djokic <Lena.Djokic@mips.com> MIPS: InstructionCodeGeneratorMIPS*::DivRemByPowerOfTwo()

Replace [d]sll+[d]srl with [d]ins on R2+.

Change-Id: I7587e46c47c8ce413d81a5c6c29d91e32a14d855
72aba71d00dd0c420a6ff196066e9378339d46d8 30-Oct-2017 Lena Djokic <Lena.Djokic@mips.com> MIPS: Add asub_s/u.df

These instructions are needed for implementing Sum-of-Abs-Differences
visitor.

Test: mma test-art-host-gtest
Change-Id: Ie708f30a450b0558215f59f21bb49b68c852f247
3309c01e55821f693e3b9cec0ef24969edf2528f 13-Oct-2017 Lena Djokic <Lena.Djokic@imgtec.com> MIPS: Introduce a few MSA instructions

These instructions are needed for SIMD reduction.
Also added assembler tests for each instruction.

Test: mma test-art-host-gtest

Change-Id: I0f02618a14b4cbcc3b81ce51dd2586fa4cdbfd18
e764d2e50c544c2cb98ee61a15d613161ac6bd17 05-Oct-2017 Vladimir Marko <vmarko@google.com> Use ScopedArenaAllocator for register allocation.

Memory needed to compile the two most expensive methods for
aosp_angler-userdebug boot image:
BatteryStats.dumpCheckinLocked() : 25.1MiB -> 21.1MiB
BatteryStats.dumpLocked(): 49.6MiB -> 42.0MiB
This is because all the memory previously used by Scheduler
is reused by the register allocator; the register allocator
has a higher peak usage of the ArenaStack.

And continue the "arena"->"allocator" renaming.

Test: m test-art-host-gtest
Test: testrunner.py --host
Bug: 64312607
Change-Id: Idfd79a9901552b5147ec0bf591cb38120de86b01
caa31e732bc9bb0007c39c504b109a4867ee5dd9 15-Sep-2017 Aart Bik <ajcbik@google.com> Add repeat support for memory addresses.

Rationale:
This enables exhaustive testing of instructions
that use memory addresses. First use case of
the generics is x86.

Bug: 18380245
Bug: 18380559
Bug: 18380348

Test: assembler_x86[_64]_test

Change-Id: Ib0ad6fa65477b0c6fc04642ff980a4b9543d16d5
2dec927e60395210946e5b9dbaa03111dad2466a 02-Aug-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Implement HSelect

Test: mma test-art-host-gtest
Test: mma test-art-target-gtest in QEMU (MIPS64R6)
Test: ./testrunner.py --target --optimizing in QEMU (MIPS64R6)

Change-Id: I633fc479e0ca61b7d49b4c36fbe5db9a94da535d
0cab65610a6a984a94ef4c3f232fe0273e78d95b 26-Jul-2017 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS: Eliminate hard-coded offsets in branches

The bulk of the change is in the assemblers and their
tests.

The main goal is to introduce "bare" branches to labels
(as opposed to the existing bare branches with relative
offsets, whose direct use we want to eliminate).
These branches' delay/forbidden slots are filled
manually and these branches do not promote to long (the
branch target must be within reach of the individual
branch instruction).

The secondary goal is to add more branch tests (mainly
for bare vs non-bare branches and a few extra) and
refactor and reorganize the branch test code a bit.

The third goal is to improve idiom recognition in the
disassembler, including branch idioms and a few others.

Further details:
- introduce bare branches (R2 and R6) to labels, making
R2 branches available for use on R6
- make use of the above in the code generators
- align beqz/bnez with their GNU assembler encoding to
simplify and shorten the test code
- update the CFI test because of the above
- add trivial tests for bare and non-bare branches
(addressing existing debt as well)
- add MIPS32R6 tests for long beqc/beqzc/bc (debt)
- add MIPS64R6 long beqzc test (debt)
- group branch tests together
- group constant/literal/address-loading tests together
- make the disassembler recognize:
- b/beqz/bnez (beq/bne with $zero reg)
- nal (bltzal with $zero reg)
- bal/bgezal (bal = bgezal with $zero reg)
- move (or with $zero reg)
- li (ori/addiu with $zero reg)
- dli (daddiu with $zero reg)
- disassemble 16-bit immediate operands (in andi, ori,
xori, li, dli) as signed or unsigned as appropriate
- drop unused instructions (bltzl, bltzall, addi) from
the disassembler as there are no plans to use them

Test: test-art-host-gtest
Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: test-art-target-gtest
Test: testrunner.py --target --optimizing
Test: same tests as above on CI20
Test: booted MIPS32R2 in QEMU

Change-Id: I62b74a6c00ce0651528114806ba24a59ba564a73
b3d79e430a4c0a447121890514cdee48e4675df4 25-Jul-2017 Lena Djokic <Lena.Djokic@imgtec.com> MIPS: Add maddv/msubv MSA instructions

Added maddv.df, msubv.df, fmadd.df and fmsub.df MSA instructions
in assembler, disassembler and tests.

These instructions are needed for multiplyaccumulate support in
ART Vectorizer.

Test: mma test-art-host-gtest

Change-Id: Idef7faaeed47f1fef83fa58676ce664afe24ffe8
658263ec2fdc7758dd73c41cdcf0babcdef1e48d 07-Jun-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Add min/max MSA instructions

Added min_s.df, max_s.df, min_u.df, max_u.df, fmin.df and fmax.df MSA
instructions in assembler, disassembler and tests.

These instructions are needed for min/max support in ART Vectorizer.

Test: mma test-art-host-gtest
Change-Id: I4e8dd18ca501ac09d938a49388e4a43116660ec9
3837011236058617292bee831708449e5100c08c 10-May-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Add ilvr.df MSA instructions

These instructions are needed for compressed string support
in ART Vectorizer.

Test: mma test-art-host-gtest
Change-Id: I269473bb8bcce5aba72201380bb71860e5498d73
d8b6a53074be7d6b98c651ed8d2127f089da39a6 20-Apr-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Saves 128-bit vector registers along SuspendCheckSlowPath

We need to save 128 bits of data. This is only done for vector
registers that are live, so overhead is not too big.

Test: mma test-art-host-gtest
Test: ./testrunner.py --optimizing --target in QEMU (MIPS64)

Change-Id: I2cdfeb8056dc5ef35c92f589d8c0399c41d913b2
80248d7ba4e952f0e0110c036b48963080ef9470 20-Apr-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Add add_a.df, ave_s/u.df and aver_s/u.df MSA instructions

These instructions are needed for implementing VecAbs and
VecHalvingAdd visitors.

Test: mma test-art-host-gtest

Change-Id: Idaec03ea32bbeaba9cb7476dd0f740aa4d9cfa70
3f44403fb5b6c9c6176339ab5888e97d0b617746 31-Mar-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Add ldi.df MSA instruction

Also fixes RepeatTemplatedRegisterImmBits template.

Test: mma test-art-host-gtest

Change-Id: Ib23f8a65ba924623f8c3a2d75d4ec4491d18feb0
27af937fb4356ed34f175b14c4425fc95f5f8a19 15-Mar-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Check for MSA presence in each MSA instruction

Test: mma test-art-host-gtest

Change-Id: I123fe1e33de13af6a2b2a76f37f7ad23004a81c0
5a9e51d39ed3d1015f20b3d12b35747612cca40e 16-Mar-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> Revert "Revert "Introduce a number of MSA instructions for MIPS64""

This reverts commit 219bf253e5158c4f3438e70864b8bf7235c1e193.

Fixed memory leak in assembler_mips64_test.cc.

Test: mma valgrind-test-art-host-gtest-assembler_mips64_test64

Change-Id: I238833fd4555623c2716432fc67eab7696f1e28e
c3fec0cc6fc9698f9fbd39ea817fd7dc64643fcb 15-Dec-2016 Chris Larsen <chris.larsen@imgtec.com> MIPS64: Adjust Base and Offset

Minimize the number of statements needed to load/store data at an
arbitrary offset from a base register.

Test: test-art-host-gtest
Test: ART_TEST_OPTIMIZING=true test-art-target-run-test

Change-Id: I76cc4b715dbb5b41c76b3c537fbd62bae8409bc0
219bf253e5158c4f3438e70864b8bf7235c1e193 15-Mar-2017 Aart Bik <ajcbik@google.com> Revert "Introduce a number of MSA instructions for MIPS64"

This reverts commit dcabc8b740bf3066d59348ffdf21c164d2b27cb4.


Reason:
FAILING TESTS
valgrind-test-art-host-gtest-assembler_mips64_test32
ninja: build stopped: subcommand failed.
19:36:36 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1

Change-Id: If658375528d2a0f34bb6b22b6565fab1d863b3f5
dcabc8b740bf3066d59348ffdf21c164d2b27cb4 10-Mar-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> Introduce a number of MSA instructions for MIPS64

Added a number of MSA (The MIPS SIMD Architecture) instructions.
Added assembler tests for each instruction.
Made necessary changes in disassembler for these instructions.

Test: mma test-art-host-gtest

Change-Id: I380f02c6ae5424a96ad999037153228acb07a108
ba89c34e94a82f0a6904dcc62caa6aa7bb14c12c 10-Mar-2017 Tijana Jakovljevic <tijana.jakovljevic@imgtec.com> MIPS64: Improve storing of constants in fields and array elements

Test: booted MIPS64 in QEMU
Test: mma test-art-target-run-test
Test: mma test-art-host-gtest-assembler_mips64_test

Change-Id: I8e0002166174eebea1309358eb9d96f34eee3225
c061de1236e98fdd34d0214a9bbcc0e2149ff226 14-Feb-2017 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS: Implement heap poisoning in ART's Optimizing compiler.

This is in preparation for read barrier support.

Bug: 12687968

Test: test-art-host-gtest
Test: booted MIPS32R2 in QEMU
Test: test-art-target
Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: test-art-target (both MIPS64R6 and MIPS32R6)

Note: built with ART_HEAP_POISONING=true.

Change-Id: I0e6e04ff8de2fc8ca6126388409fa218e6920734
95f271496da7421021ccb9845726a94cd5eaa914 20-Jan-2017 Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> MIPS64: Extend assembler_mips64_test

Add tests for several existing instructions.

Test: mma test-art-host-gtest-assembler_mips64_test

Change-Id: I1505dc0cf019de2afedc9648e3fd41e7fd051861
0960ac5a5a255bb3e8418e185914243aeef54a7c 21-Dec-2016 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS64: Implement table-based packed switch

Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: test-art-target-run-test-optimizing (MIPS64R6) in QEMU
Test: test-art-host-gtest

Change-Id: I333dca43fca57ae7e6021bb84585487c889417c3
f63f569eeefe3907c48a175494a2a0ba351b641a 14-Dec-2016 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS64: Improve string and class loads.

This adds most kinds of string/class loads.
JIT string/class loads are TBD separately.

This also fixes Mips64Assembler::LoadLabelAddress()
(adding a constant to a 64-bit address must be done
using daddiu, not addiu).

Test: test-art-host-gtest
Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: "make -j1 ART_TEST_DEFAULT_COMPILER=false ART_TEST_OPTIMIZING=true
ART_TEST_INTERPRETER=false ART_TEST_JIT=false
ART_TEST_PIC_TEST=true test-art-target-run-test64"

Change-Id: I1f94ece4cd202382c11167e1ed958e9d08d92822
36073947d2edb04e69ad0b20ec9de8c0712b8fd2 14-Dec-2016 Vladimir Marko <vmarko@google.com> Fix AssemblerMIPS64Test.LongBalc() running out of memory.

Pre-allocate the necessary buffer because the reallocation
strategy doesn't work well for a test of this size.

Test: m test-art-host-gtest-assembler_mips64_test
Change-Id: I16bc75f0ae83a62e5f3ed2cd8228dd40f0eb9524
19f6c696bbb7a17d8ac521b316c40f9cbef32151 01-Dec-2016 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS64: Improve method invocation.

Improvements include:
- support for all kinds of method loads and static/direct calls
- 32-bit and 64-bit literals for the above and future work
- shorter instruction sequences for recursive static/direct calls
Also:
- include the MIPS64 dinsu instruction (missed earlier) and minor
clean-up in the disassembler
- properly prefix constant names with 'k' in relative patcher tests

Test: test-art-host-gtest
Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: "make -j1 ART_TEST_DEFAULT_COMPILER=false ART_TEST_OPTIMIZING=true
ART_TEST_INTERPRETER=false ART_TEST_JIT=false
ART_TEST_PIC_TEST=true test-art-target-run-test64"

Change-Id: I19876fa5316b68531af7dfddfce90d2068433116
e36605910cb13da1440fb9d7a8293842a9209c97 09-Nov-2016 Chris Larsen <chris.larsen@imgtec.com> MIPS64: java.lang.String.getChars

Test: run-test --64 --optimizing 020-string
Test: run-test --64 020-string
Test: run-test --64 --no-prebuild --optimizing 020-string
Test: run-test --64 --no-prebuild 020-string
Test: run-test --64 --optimizing 082-inline-execute
Test: run-test --64 082-inline-execute
Test: run-test --64 --no-prebuild --optimizing 082-inline-execute
Test: run-test --64 --no-prebuild 082-inline-execute
Test: mma -j2 ART_TEST_OPTIMIZING=true test-art-target-run-test
Test: mma test-art-target-gtest -j2
Test: booted MIPS64R6 emulator.

Note: All tests run against MIPS64 QEMU.

Change-Id: I48b9a87465f2516044a2e4f598cc5dce56b0d1c9
2e965aca73bacf84123b5c53bb0904b13b48e428 04-Nov-2016 Andreas Gampe <agampe@google.com> ART: Use references in assembler tests

Move parameters to const references.

Bug: 32619234
Test: m
Change-Id: Ib68bdc313b91fee1e9e4e1e794eeca630837b005
c733dca42157cafe8751b558f1f8ab65efdeaa63 14-May-2016 Chris Larsen <chris.larsen@imgtec.com> MIPS64: Improve non-trivial 64-bit constant loading.

- Add special case where the upper 32 bits of the constant are equal to
the lower 32 bits of the constant. Use the "dinsu" instruction to
replicate the bottom 32 bits into the top 32 bits.

- Test output of LoadConst32()/LoadConst64() against various test
constants.
o Make the implementation of LoadConst64() into a template.
o Using the template code for LoadConst64() implement test
cases which simulate the computation of the value which the
generated code sequence is actually supposed to load.
o Add conditionally compiled code to verify that all of the
various data paths through the LoadConst64() function
actually get exercised.

Test: Booted MIPS64 in QEMU, and ran assembler tests.

Change-Id: Ie1ec050e65c666168a9ea582bae9fda97e4cf36a
d967266cdfc8011c81ba6e9857a247c4a73bd0fc 03-Sep-2015 Lazar Trsic <Lazar.Trsic@imgtec.com> MIPS64: Remove unaligned memory access from art generated code

Unaligned memory access was caused by sd, ld, ldc1 and sdc1
instructions. Check if offset is unaligned and replace it
with two 32 bit memory accesses, if so.

Added assembler tests for new instructions, as well as assembler
tests for LoadFromOffset, LoadFpuFromOffset, StoreToOffset and
StoreFpuToOffset.

Change-Id: I0228a4a2ce6c801eeb5b46952b8330e14468deb3
baf60b7cceb3968ae36540e2f7f92cec3805f6ed 23-Dec-2015 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS: Improve conversion between ints and floats.

Change-Id: I767fe9623cc14e8480c31e305725eb5221cac282
299a93993fb8f3efbf0465cf674d80c3bcfdc66c 09-Dec-2015 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS64: Fuse long and FP compare & condition in Optimizing.

Bug: 25559148

Change-Id: I2d14ac75460a76848c71c08cffff6d7a18f5f580
a0e87b0a97fadd54540ec7e8331b61bebd82d378 25-Sep-2015 Alexey Frunze <Alexey.Frunze@imgtec.com> MIPS64: Support short and long branches

Change-Id: I618c960bd211048166d9fde78d4106bd3ca42b3a
98a73e14554301ccd6d05f8a893b59b1d8b5eaeb 19-Oct-2015 Chris Larsen <chris.larsen@imgtec.com> MIPS64: Add tests for rotation, and shift instructions

Change-Id: I5611cb5c638c6be193739cbe859cb4ff4074a5fa
5141763acd9ca2ddb2ee6bcc742d6d2a2aebd7df 02-Oct-2015 Chris Larsen <chris.larsen@imgtec.com> MIPS64: Additional assember tests:

- MOV.fmt - NEG.fmt - CVT.D.fmt - CVT.S.fmt
- JALR - SLL - SRL - SRA
- DSLL - DSRA - DSRL - DSLL32
- DSRL32 - DSRA32

Change-Id: Ib15ac72128805a9bca707211359191e32d95d5d7
dbce0d738e9d7956d2bd73e932a0fdd28f2229b4 17-Sep-2015 Chris Larsen <chris.larsen@imgtec.com> MIPS64r6 Assembler Tests

Assembler tests for:

- SQRT.fmt - ABS.fmt - ROUND.L.fmt - ROUND.W.fmt
- CEIL.L.fmt - CEIL.W.fmt - FLOOR.L.fmt - FLOOR.W.fmt
- SEL.fmt - RINT.fmt - CLASS.fmt - MIN.fmt
- MAX.fmt - cvt.d.l - BITSWAP - DBITSWAP
- DSBH - DSHD - WSBH - ROTR
- SELEQZ - SELNEZ - CLZ - CLO
- DCLZ - DCLO - SC - SCD
- LL - LLD

These are the assembler instructions which were added to support
intrinsic functions on MIPS64. Tests for additional assembler
instructions will follow.

Support added to the testing infrastructure for:

- Assembler instructions which use three registers; previously
instructions were limited to one, or two, registers.
- Immediate values which have their sizes specified by the number of
bits required to store them rather than the number of bytes, in both
signed and unsigned versions.

Change-Id: I38c07dcbf2539825b25bed13aac05a26fa594b0b