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

Side by Side Diff: runtime/vm/unit_test.h

Issue 1283733003: VM: Refactor assembler test that rely on the constant pool. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 | « runtime/vm/assembler_x64_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_UNIT_TEST_H_ 5 #ifndef VM_UNIT_TEST_H_
6 #define VM_UNIT_TEST_H_ 6 #define VM_UNIT_TEST_H_
7 7
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 9
10 #include "platform/globals.h" 10 #include "platform/globals.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } 314 }
315 Isolate* isolate() const { return isolate_; } 315 Isolate* isolate() const { return isolate_; }
316 316
317 private: 317 private:
318 Isolate* isolate_; 318 Isolate* isolate_;
319 319
320 DISALLOW_COPY_AND_ASSIGN(TestIsolateScope); 320 DISALLOW_COPY_AND_ASSIGN(TestIsolateScope);
321 }; 321 };
322 322
323 323
324 template<typename T> struct is_void {
325 static const bool value = false;
326 };
327
328
329 template<> struct is_void<void> {
330 static const bool value = true;
331 };
332
333
334 template<typename T> struct is_double {
335 static const bool value = false;
336 };
337
338
339 template<> struct is_double<double> {
340 static const bool value = true;
341 };
342
343
324 class AssemblerTest { 344 class AssemblerTest {
325 public: 345 public:
326 AssemblerTest(const char* name, Assembler* assembler) 346 AssemblerTest(const char* name, Assembler* assembler)
327 : name_(name), 347 : name_(name),
328 assembler_(assembler), 348 assembler_(assembler),
329 code_(Code::ZoneHandle()) { 349 code_(Code::ZoneHandle()) {
330 ASSERT(name != NULL); 350 ASSERT(name != NULL);
331 ASSERT(assembler != NULL); 351 ASSERT(assembler != NULL);
332 } 352 }
333 ~AssemblerTest() { } 353 ~AssemblerTest() { }
334 354
335 Assembler* assembler() const { return assembler_; } 355 Assembler* assembler() const { return assembler_; }
336 356
337 const Code& code() const { return code_; } 357 const Code& code() const { return code_; }
338 358
339 uword entry() const { return entry_; } 359 uword entry() const { return entry_; }
360 #if defined(USING_SIMULATOR)
srdjan 2015/08/10 16:23:51 I am not sure I found this more readable and maint
zra 2015/08/10 16:43:32 This makes writing the assembler tests a bit easie
Florian Schneider 2015/08/11 07:58:28 Yes, I just added the variants necessary. The comp
Florian Schneider 2015/08/11 07:58:28 There may be even more elegant ways to solve this
361 template<typename ResultType> ResultType Invoke() {
362 const bool fp_return = is_double<ResultType>::value;
363 const bool fp_args = false;
364 return static_cast<ResultType>(Simulator::Current()->Call(
365 bit_cast<int64_t, uword>(entry()), 0, 0, 0, 0, fp_return, fp_args));
366 }
zra 2015/08/10 16:43:32 Missing newline
367 template<typename ResultType, typename Arg1Type>
368 ResultType Invoke(Arg1Type arg1) {
369 const bool fp_return = is_double<ResultType>::value;
370 COMPILE_ASSERT(!is_double<Arg1Type>::value);
371 const bool fp_args = false;
372 return static_cast<ResultType>(Simulator::Current()->Call(
373 bit_cast<int64_t, uword>(entry()), reinterpret_cast<int64_t>(arg1),
374 0, 0, 0, fp_return, fp_args));
375 }
zra 2015/08/10 16:43:32 Missing newline
Florian Schneider 2015/08/11 07:58:28 Not between template functions
376 template<typename ResultType,
377 typename Arg1Type,
378 typename Arg2Type,
379 typename Arg3Type>
380 ResultType Invoke(Arg1Type arg1, Arg2Type arg2, Arg3Type arg3) {
zra 2015/08/10 16:43:32 The first two Invokes appear to be used for assemb
Florian Schneider 2015/08/11 07:58:28 This one is used ony for one test right now (Store
381 COMPILE_ASSERT(is_void<ResultType>::value);
382 const bool fp_return = false;
383 COMPILE_ASSERT(!is_double<Arg1Type>::value);
384 const bool fp_args = false;
385 return static_cast<ResultType>(Simulator::Current()->Call(
386 bit_cast<int64_t, uword>(entry()),
387 reinterpret_cast<int64_t>(arg1),
388 reinterpret_cast<int64_t>(arg2),
389 reinterpret_cast<int64_t>(arg3),
390 0, fp_return, fp_args));
391 }
392 #else
393 template<typename ResultType> ResultType Invoke() {
394 typedef ResultType (*FunctionType) ();
395 return reinterpret_cast<FunctionType>(entry())();
396 }
397
398 template<typename ResultType, typename Arg1Type>
399 ResultType Invoke(Arg1Type arg1) {
400 typedef ResultType (*FunctionType) (Arg1Type);
zra 2015/08/10 16:43:31 Is there some reason not to have the same asserts
Florian Schneider 2015/08/11 07:58:28 No, regular invocation just works with all types.
zra 2015/08/11 19:48:17 I think it would be good to have consistent behavi
Florian Schneider 2015/08/12 07:30:53 Why add assertions that don't guard against anythi
zra 2015/08/17 16:35:43 The assertions guard against doing something in ar
401 return reinterpret_cast<FunctionType>(entry())(arg1);
402 }
403
404 template<typename ResultType,
405 typename Arg1Type,
406 typename Arg2Type,
407 typename Arg3Type>
408 ResultType Invoke(Arg1Type arg1, Arg2Type arg2, Arg3Type arg3) {
409 typedef ResultType (*FunctionType) (Arg1Type, Arg2Type, Arg3Type);
zra 2015/08/10 16:43:32 Same question.
410 return reinterpret_cast<FunctionType>(entry())(arg1, arg2, arg3);
411 }
412 #endif
340 413
341 // Assemble test and set code_ and entry_. 414 // Assemble test and set code_ and entry_.
342 void Assemble(); 415 void Assemble();
343 416
344 private: 417 private:
345 const char* name_; 418 const char* name_;
346 Assembler* assembler_; 419 Assembler* assembler_;
347 Code& code_; 420 Code& code_;
348 uword entry_; 421 uword entry_;
349 422
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 } \ 497 } \
425 } else { \ 498 } else { \
426 dart::Expect(__FILE__, __LINE__).Fail("expected True, but was '%s'\n", \ 499 dart::Expect(__FILE__, __LINE__).Fail("expected True, but was '%s'\n", \
427 #handle); \ 500 #handle); \
428 } \ 501 } \
429 } while (0) 502 } while (0)
430 503
431 } // namespace dart 504 } // namespace dart
432 505
433 #endif // VM_UNIT_TEST_H_ 506 #endif // VM_UNIT_TEST_H_
OLDNEW
« no previous file with comments | « runtime/vm/assembler_x64_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698