diff options
| author | Artem Serov <artem.serov@linaro.org> | 2017-04-03 18:47:32 +0100 |
|---|---|---|
| committer | Artem Serov <artem.serov@linaro.org> | 2017-04-10 11:43:33 +0100 |
| commit | d4bccf1ece319a3a99e03ecbcbbf40bb82b9e331 (patch) | |
| tree | 2890740d9cab3eee2be223666f528c6707b89f90 /compiler/optimizing/codegen_test.cc | |
| parent | 903b8169074c01590ab3f5ad9190d9c7e3fe795b (diff) | |
ARM64: Support 128-bit registers for SIMD.
Test: test-art-host, test-art-target
Change-Id: Ifb931a99d34ea77602a0e0781040ed092de9faaa
Diffstat (limited to 'compiler/optimizing/codegen_test.cc')
| -rw-r--r-- | compiler/optimizing/codegen_test.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/compiler/optimizing/codegen_test.cc b/compiler/optimizing/codegen_test.cc index f8bbf68c1c..4ba5c5580f 100644 --- a/compiler/optimizing/codegen_test.cc +++ b/compiler/optimizing/codegen_test.cc @@ -769,6 +769,45 @@ TEST_F(CodegenTest, ARM64ParallelMoveResolverB34760542) { InternalCodeAllocator code_allocator; codegen.Finalize(&code_allocator); } + +// Check that ParallelMoveResolver works fine for ARM64 for both cases when SIMD is on and off. +TEST_F(CodegenTest, ARM64ParallelMoveResolverSIMD) { + std::unique_ptr<const Arm64InstructionSetFeatures> features( + Arm64InstructionSetFeatures::FromCppDefines()); + ArenaPool pool; + ArenaAllocator allocator(&pool); + HGraph* graph = CreateGraph(&allocator); + arm64::CodeGeneratorARM64 codegen(graph, *features.get(), CompilerOptions()); + + codegen.Initialize(); + + graph->SetHasSIMD(true); + for (int i = 0; i < 2; i++) { + HParallelMove* move = new (graph->GetArena()) HParallelMove(graph->GetArena()); + move->AddMove(Location::SIMDStackSlot(0), + Location::SIMDStackSlot(257), + Primitive::kPrimDouble, + nullptr); + move->AddMove(Location::SIMDStackSlot(257), + Location::SIMDStackSlot(0), + Primitive::kPrimDouble, + nullptr); + move->AddMove(Location::FpuRegisterLocation(0), + Location::FpuRegisterLocation(1), + Primitive::kPrimDouble, + nullptr); + move->AddMove(Location::FpuRegisterLocation(1), + Location::FpuRegisterLocation(0), + Primitive::kPrimDouble, + nullptr); + codegen.GetMoveResolver()->EmitNativeCode(move); + graph->SetHasSIMD(false); + } + + InternalCodeAllocator code_allocator; + codegen.Finalize(&code_allocator); +} + #endif #ifdef ART_ENABLE_CODEGEN_mips |
