From f77d98f75594b80bba8e612fd7f20776967c98ff Mon Sep 17 00:00:00 2001 From: Clemens Hammacher Date: Thu, 19 Oct 2017 11:14:34 +0200 Subject: [PATCH] Reland "[arm] [simulator] Do also execute tests on real hardware" This is a reland of 8bacd8486b97613fa82557ea67a2f7e2dc348978. The failing test is disabled if not executing in the simulator. Original change's description: > [arm] [simulator] Do also execute tests on real hardware > > In order to avoid writing tests that *only* pass in the simulator, but > not on real hardware, do also execute the simulator tests on real > hardware. > > R=ahaas@chromium.org, rodolph.perfetta@arm.com > > Bug: v8:6947 > Change-Id: Ibdf1719fff20e17620c0aaa343d7ea28e48f3837 > Reviewed-on: https://chromium-review.googlesource.com/722961 > Commit-Queue: Clemens Hammacher > Reviewed-by: Rodolph Perfetta > Reviewed-by: Andreas Haas > Cr-Commit-Position: refs/heads/master@{#48706} Bug: v8:6947, v8:6963 Change-Id: I5733794bc5ca223c8e66afcdeb8414b1b4121314 Reviewed-on: https://chromium-review.googlesource.com/727880 Commit-Queue: Clemens Hammacher Reviewed-by: Andreas Haas Cr-Commit-Position: refs/heads/master@{#48734} --- test/cctest/test-simulator-arm.cc | 71 ++++++++++++++++--------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/test/cctest/test-simulator-arm.cc b/test/cctest/test-simulator-arm.cc index 7404418e84..d5b87a17b0 100644 --- a/test/cctest/test-simulator-arm.cc +++ b/test/cctest/test-simulator-arm.cc @@ -38,15 +38,13 @@ namespace v8 { namespace internal { -#if defined(USE_SIMULATOR) - #ifndef V8_TARGET_LITTLE_ENDIAN #error Expected ARM to be little-endian #endif // Define these function prototypes to match JSEntryFunction in execution.cc. -typedef Object* (*F1)(int x, int p1, int p2, int p3, int p4); -typedef Object* (*F3)(void* p0, int p1, int p2, int p3, int p4); +typedef Object* (*F_iiiii)(int p0, int p1, int p2, int p3, int p4); +typedef Object* (*F_piiii)(void* p0, int p1, int p2, int p3, int p4); #define __ assm. @@ -170,6 +168,22 @@ void AssembleMemoryAccess(Assembler* assembler, MemoryAccess access, } } +Address AssembleCode(std::function assemble) { + Isolate* isolate = CcTest::i_isolate(); + Assembler assm(isolate, nullptr, 0); + + assemble(assm); + + __ bx(lr); + + CodeDesc desc; + assm.GetCode(isolate, &desc); + Handle code = + isolate->factory()->NewCode(desc, Code::STUB, Handle()); + return code->entry(); +} + +#if defined(USE_SIMULATOR) void AssembleLoadExcl(Assembler* assembler, MemoryAccess access, Register value_reg, Register addr_reg) { DCHECK(access.kind == MemoryAccess::Kind::LoadExcl); @@ -183,33 +197,17 @@ void AssembleStoreExcl(Assembler* assembler, MemoryAccess access, AssembleMemoryAccess(assembler, access, dest_reg, value_reg, addr_reg); } -F3 AssembleCode(std::function assemble) { - Isolate* isolate = CcTest::i_isolate(); - Assembler assm(isolate, nullptr, 0); - - assemble(assm); - - __ bx(lr); - - CodeDesc desc; - assm.GetCode(isolate, &desc); - Handle code = - isolate->factory()->NewCode(desc, Code::STUB, Handle()); - F3 f = FUNCTION_CAST(code->entry()); - return f; -} - void TestInvalidateExclusiveAccess(TestData initial_data, MemoryAccess access1, MemoryAccess access2, MemoryAccess access3, int expected_res, TestData expected_data) { Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); - F3 f = AssembleCode([&](Assembler& assm) { + F_piiii f = FUNCTION_CAST(AssembleCode([&](Assembler& assm) { AssembleLoadExcl(&assm, access1, r1, r1); AssembleMemoryAccess(&assm, access2, r3, r2, r1); AssembleStoreExcl(&assm, access3, r0, r3, r1); - }); + })); TestData t = initial_data; @@ -230,6 +228,7 @@ void TestInvalidateExclusiveAccess(TestData initial_data, MemoryAccess access1, break; } } +#endif std::vector Float32Inputs() { std::vector inputs; @@ -251,6 +250,10 @@ std::vector Float64Inputs() { } // namespace +// TODO(rodolph.perfetta@arm.com): Enable this test for native hardware, see +// http://crbug.com/v8/6963. +#if defined(USE_SIMULATOR) + TEST(simulator_invalidate_exclusive_access) { using Kind = MemoryAccess::Kind; using Size = MemoryAccess::Size; @@ -287,12 +290,14 @@ TEST(simulator_invalidate_exclusive_access) { 0, TestData(7)); } +#endif // USE_SIMULATOR + static int ExecuteMemoryAccess(Isolate* isolate, TestData* test_data, MemoryAccess access) { HandleScope scope(isolate); - F3 f = AssembleCode([&](Assembler& assm) { + F_piiii f = FUNCTION_CAST(AssembleCode([&](Assembler& assm) { AssembleMemoryAccess(&assm, access, r0, r2, r1); - }); + })); return reinterpret_cast( CALL_GENERATED_CODE(isolate, f, test_data, 0, 0, 0, 0)); @@ -417,11 +422,11 @@ TEST(simulator_vabs_32) { Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); - F3 f = AssembleCode([](Assembler& assm) { + F_iiiii f = FUNCTION_CAST(AssembleCode([](Assembler& assm) { __ vmov(s0, r0); __ vabs(s0, s0); __ vmov(r0, s0); - }); + })); for (Float32 f32 : Float32Inputs()) { Float32 res = Float32::FromBits(reinterpret_cast( @@ -435,11 +440,11 @@ TEST(simulator_vabs_64) { Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); - F3 f = AssembleCode([](Assembler& assm) { + F_iiiii f = FUNCTION_CAST(AssembleCode([](Assembler& assm) { __ vmov(d0, r0, r1); __ vabs(d0, d0); __ vmov(r1, r0, d0); - }); + })); for (Float64 f64 : Float64Inputs()) { uint32_t p0 = static_cast(f64.get_bits()); @@ -456,11 +461,11 @@ TEST(simulator_vneg_32) { Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); - F3 f = AssembleCode([](Assembler& assm) { + F_iiiii f = FUNCTION_CAST(AssembleCode([](Assembler& assm) { __ vmov(s0, r0); __ vneg(s0, s0); __ vmov(r0, s0); - }); + })); for (Float32 f32 : Float32Inputs()) { Float32 res = Float32::FromBits(reinterpret_cast( @@ -474,11 +479,11 @@ TEST(simulator_vneg_64) { Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); - F3 f = AssembleCode([](Assembler& assm) { + F_iiiii f = FUNCTION_CAST(AssembleCode([](Assembler& assm) { __ vmov(d0, r0, r1); __ vneg(d0, d0); __ vmov(r1, r0, d0); - }); + })); for (Float64 f64 : Float64Inputs()) { uint32_t p0 = static_cast(f64.get_bits()); @@ -493,7 +498,5 @@ TEST(simulator_vneg_64) { #undef __ -#endif // USE_SIMULATOR - } // namespace internal } // namespace v8