Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(649)

Side by Side Diff: crosstest/test_sync_atomic_main.cpp

Issue 1369333003: Subzero. Enable Atomics in ARM. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments; make format; git pull; merge. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Makefile.standalone ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/crosstest/test_sync_atomic_main.cpp - Driver for tests -----===// 1 //===- subzero/crosstest/test_sync_atomic_main.cpp - Driver for tests -----===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // Driver for cross testing atomic intrinsics, via the sync builtins. 10 // Driver for cross testing atomic intrinsics, via the sync builtins.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 Type ResultSz1 = Funcs[f].FuncSz(fetch_first, AtomicLoc, Value2); 85 Type ResultSz1 = Funcs[f].FuncSz(fetch_first, AtomicLoc, Value2);
86 Type ResultSz2 = *AtomicLoc; 86 Type ResultSz2 = *AtomicLoc;
87 *AtomicLoc = Value1; 87 *AtomicLoc = Value1;
88 Type ResultLlc1 = Funcs[f].FuncLlc(fetch_first, AtomicLoc, Value2); 88 Type ResultLlc1 = Funcs[f].FuncLlc(fetch_first, AtomicLoc, Value2);
89 Type ResultLlc2 = *AtomicLoc; 89 Type ResultLlc2 = *AtomicLoc;
90 if (ResultSz1 == ResultLlc1 && ResultSz2 == ResultLlc2) { 90 if (ResultSz1 == ResultLlc1 && ResultSz2 == ResultLlc2) {
91 ++Passes; 91 ++Passes;
92 } else { 92 } else {
93 ++Failures; 93 ++Failures;
94 std::cout << "test_" << Funcs[f].Name << (CHAR_BIT * sizeof(Type)) 94 std::cout << "test_" << Funcs[f].Name << (CHAR_BIT * sizeof(Type))
95 << "(" << static_cast<uint64>(Value1) << ", " 95 << "(" << fetch_first << ", "
96 << static_cast<uint64>(Value1) << ", "
96 << static_cast<uint64>(Value2) 97 << static_cast<uint64>(Value2)
97 << "): sz1=" << static_cast<uint64>(ResultSz1) 98 << "): sz1=" << static_cast<uint64>(ResultSz1)
98 << " llc1=" << static_cast<uint64>(ResultLlc1) 99 << " llc1=" << static_cast<uint64>(ResultLlc1)
99 << " sz2=" << static_cast<uint64>(ResultSz2) 100 << " sz2=" << static_cast<uint64>(ResultSz2)
100 << " llc2=" << static_cast<uint64>(ResultLlc2) << "\n"; 101 << " llc2=" << static_cast<uint64>(ResultLlc2) << "\n";
101 } 102 }
102 } 103 }
103 } 104 }
104 } 105 }
105 } 106 }
(...skipping 26 matching lines...) Expand all
132 *AtomicLoc = Value1; 133 *AtomicLoc = Value1;
133 Type ResultLlc1 = 134 Type ResultLlc1 =
134 Funcs[f].FuncLlc(AtomicLoc, flip ? Value2 : Value1, Value2); 135 Funcs[f].FuncLlc(AtomicLoc, flip ? Value2 : Value1, Value2);
135 Type ResultLlc2 = *AtomicLoc; 136 Type ResultLlc2 = *AtomicLoc;
136 if (ResultSz1 == ResultLlc1 && ResultSz2 == ResultLlc2) { 137 if (ResultSz1 == ResultLlc1 && ResultSz2 == ResultLlc2) {
137 ++Passes; 138 ++Passes;
138 } else { 139 } else {
139 ++Failures; 140 ++Failures;
140 std::cout << "test_" << Funcs[f].Name << (CHAR_BIT * sizeof(Type)) 141 std::cout << "test_" << Funcs[f].Name << (CHAR_BIT * sizeof(Type))
141 << "(" << static_cast<uint64>(Value1) << ", " 142 << "(" << static_cast<uint64>(Value1) << ", "
142 << static_cast<uint64>(Value2) 143 << static_cast<uint64>(Value2) << ", flip=" << flip
143 << "): sz1=" << static_cast<uint64>(ResultSz1) 144 << "): sz1=" << static_cast<uint64>(ResultSz1)
144 << " llc1=" << static_cast<uint64>(ResultLlc1) 145 << " llc1=" << static_cast<uint64>(ResultLlc1)
145 << " sz2=" << static_cast<uint64>(ResultSz2) 146 << " sz2=" << static_cast<uint64>(ResultSz2)
146 << " llc2=" << static_cast<uint64>(ResultLlc2) << "\n"; 147 << " llc2=" << static_cast<uint64>(ResultLlc2) << "\n";
147 } 148 }
148 } 149 }
149 } 150 }
150 } 151 }
151 } 152 }
152 } 153 }
153 154
154 template <typename Type> struct ThreadData { 155 template <typename Type> struct ThreadData {
155 Type (*FuncPtr)(bool, volatile Type *, Type); 156 Type (*FuncPtr)(bool, volatile Type *, Type);
156 bool Fetch; 157 bool Fetch;
157 volatile Type *Ptr; 158 volatile Type *Ptr;
158 Type Adjustment; 159 Type Adjustment;
159 }; 160 };
160 161
161 template <typename Type> void *threadWrapper(void *Data) { 162 template <typename Type> void *threadWrapper(void *Data) {
162 const size_t NumReps = 8000; 163 #ifdef ARM32
164 // Given that most of times these crosstests for ARM are run under qemu, we
165 // set a lower NumReps to allow crosstests to complete within a reasonable
166 // amount of time.
167 static const size_t NumReps = 1000;
168 #else // ARM32
169 static const size_t NumReps = 8000;
170 #endif // ARM32
171
163 ThreadData<Type> *TData = reinterpret_cast<ThreadData<Type> *>(Data); 172 ThreadData<Type> *TData = reinterpret_cast<ThreadData<Type> *>(Data);
164 for (size_t i = 0; i < NumReps; ++i) { 173 for (size_t i = 0; i < NumReps; ++i) {
165 (void)TData->FuncPtr(TData->Fetch, TData->Ptr, TData->Adjustment); 174 (void)TData->FuncPtr(TData->Fetch, TData->Ptr, TData->Adjustment);
166 } 175 }
167 return NULL; 176 return NULL;
168 } 177 }
169 178
170 #ifndef X8664_STACK_HACK 179 #ifndef X8664_STACK_HACK
171 void AllocStackForThread(uint32, pthread_attr_t *) {} 180 void AllocStackForThread(uint32, pthread_attr_t *) {}
172 #else // defined(X8664_STACK_HACK) 181 #else // defined(X8664_STACK_HACK)
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 testValCompareAndSwap<uint64>(&AtomicLocs.l64, TotalTests, Passes, Failures); 303 testValCompareAndSwap<uint64>(&AtomicLocs.l64, TotalTests, Passes, Failures);
295 testAtomicRMWThreads<uint8_t>(&AtomicLocs.l8, TotalTests, Passes, Failures); 304 testAtomicRMWThreads<uint8_t>(&AtomicLocs.l8, TotalTests, Passes, Failures);
296 testAtomicRMWThreads<uint16_t>(&AtomicLocs.l16, TotalTests, Passes, Failures); 305 testAtomicRMWThreads<uint16_t>(&AtomicLocs.l16, TotalTests, Passes, Failures);
297 testAtomicRMWThreads<uint32_t>(&AtomicLocs.l32, TotalTests, Passes, Failures); 306 testAtomicRMWThreads<uint32_t>(&AtomicLocs.l32, TotalTests, Passes, Failures);
298 testAtomicRMWThreads<uint64>(&AtomicLocs.l64, TotalTests, Passes, Failures); 307 testAtomicRMWThreads<uint64>(&AtomicLocs.l64, TotalTests, Passes, Failures);
299 308
300 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes 309 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes
301 << " Failures=" << Failures << "\n"; 310 << " Failures=" << Failures << "\n";
302 return Failures; 311 return Failures;
303 } 312 }
OLDNEW
« no previous file with comments | « Makefile.standalone ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698