OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 #include <stdio.h> | 28 #include <stdio.h> |
29 #include <stdlib.h> | 29 #include <stdlib.h> |
30 #include <string.h> | 30 #include <string.h> |
31 #include <cmath> | 31 #include <cmath> |
32 #include <limits> | 32 #include <limits> |
33 | 33 |
34 #include "v8.h" | 34 #include "v8.h" |
35 | 35 |
36 #include "macro-assembler.h" | 36 #include "macro-assembler.h" |
37 #include "a64/simulator-a64.h" | 37 #include "arm64/simulator-arm64.h" |
38 #include "a64/decoder-a64-inl.h" | 38 #include "arm64/decoder-arm64-inl.h" |
39 #include "a64/disasm-a64.h" | 39 #include "arm64/disasm-arm64.h" |
40 #include "a64/utils-a64.h" | 40 #include "arm64/utils-arm64.h" |
41 #include "cctest.h" | 41 #include "cctest.h" |
42 #include "test-utils-a64.h" | 42 #include "test-utils-arm64.h" |
43 | 43 |
44 using namespace v8::internal; | 44 using namespace v8::internal; |
45 | 45 |
46 // Test infrastructure. | 46 // Test infrastructure. |
47 // | 47 // |
48 // Tests are functions which accept no parameters and have no return values. | 48 // Tests are functions which accept no parameters and have no return values. |
49 // The testing code should not perform an explicit return once completed. For | 49 // The testing code should not perform an explicit return once completed. For |
50 // example to test the mov immediate instruction a very simple test would be: | 50 // example to test the mov immediate instruction a very simple test would be: |
51 // | 51 // |
52 // TEST(mov_x0_one) { | 52 // TEST(mov_x0_one) { |
(...skipping 10 matching lines...) Expand all Loading... |
63 // TEARDOWN(); | 63 // TEARDOWN(); |
64 // } | 64 // } |
65 // | 65 // |
66 // Within a START ... END block all registers but sp can be modified. sp has to | 66 // Within a START ... END block all registers but sp can be modified. sp has to |
67 // be explicitly saved/restored. The END() macro replaces the function return | 67 // be explicitly saved/restored. The END() macro replaces the function return |
68 // so it may appear multiple times in a test if the test has multiple exit | 68 // so it may appear multiple times in a test if the test has multiple exit |
69 // points. | 69 // points. |
70 // | 70 // |
71 // Once the test has been run all integer and floating point registers as well | 71 // Once the test has been run all integer and floating point registers as well |
72 // as flags are accessible through a RegisterDump instance, see | 72 // as flags are accessible through a RegisterDump instance, see |
73 // utils-a64.cc for more info on RegisterDump. | 73 // utils-arm64.cc for more info on RegisterDump. |
74 // | 74 // |
75 // We provide some helper assert to handle common cases: | 75 // We provide some helper assert to handle common cases: |
76 // | 76 // |
77 // ASSERT_EQUAL_32(int32_t, int_32t) | 77 // ASSERT_EQUAL_32(int32_t, int_32t) |
78 // ASSERT_EQUAL_FP32(float, float) | 78 // ASSERT_EQUAL_FP32(float, float) |
79 // ASSERT_EQUAL_32(int32_t, W register) | 79 // ASSERT_EQUAL_32(int32_t, W register) |
80 // ASSERT_EQUAL_FP32(float, S register) | 80 // ASSERT_EQUAL_FP32(float, S register) |
81 // ASSERT_EQUAL_64(int64_t, int_64t) | 81 // ASSERT_EQUAL_64(int64_t, int_64t) |
82 // ASSERT_EQUAL_FP64(double, double) | 82 // ASSERT_EQUAL_FP64(double, double) |
83 // ASSERT_EQUAL_64(int64_t, X register) | 83 // ASSERT_EQUAL_64(int64_t, X register) |
(...skipping 6208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6292 ASSERT_EQUAL_FP64(2.5f, d4); | 6292 ASSERT_EQUAL_FP64(2.5f, d4); |
6293 ASSERT_EQUAL_FP64(-1.5f, d5); | 6293 ASSERT_EQUAL_FP64(-1.5f, d5); |
6294 ASSERT_EQUAL_FP64(-2.5f, d6); | 6294 ASSERT_EQUAL_FP64(-2.5f, d6); |
6295 ASSERT_EQUAL_FP64(kFP64PositiveInfinity, d7); | 6295 ASSERT_EQUAL_FP64(kFP64PositiveInfinity, d7); |
6296 ASSERT_EQUAL_FP64(kFP64NegativeInfinity, d8); | 6296 ASSERT_EQUAL_FP64(kFP64NegativeInfinity, d8); |
6297 ASSERT_EQUAL_FP64(0.0f, d9); | 6297 ASSERT_EQUAL_FP64(0.0f, d9); |
6298 ASSERT_EQUAL_FP64(-0.0f, d10); | 6298 ASSERT_EQUAL_FP64(-0.0f, d10); |
6299 ASSERT_EQUAL_FP64(FLT_MAX, d11); | 6299 ASSERT_EQUAL_FP64(FLT_MAX, d11); |
6300 ASSERT_EQUAL_FP64(FLT_MIN, d12); | 6300 ASSERT_EQUAL_FP64(FLT_MIN, d12); |
6301 | 6301 |
6302 // Check that the NaN payload is preserved according to A64 conversion rules: | 6302 // Check that the NaN payload is preserved according to ARM64 conversion |
| 6303 // rules: |
6303 // - The sign bit is preserved. | 6304 // - The sign bit is preserved. |
6304 // - The top bit of the mantissa is forced to 1 (making it a quiet NaN). | 6305 // - The top bit of the mantissa is forced to 1 (making it a quiet NaN). |
6305 // - The remaining mantissa bits are copied until they run out. | 6306 // - The remaining mantissa bits are copied until they run out. |
6306 // - The low-order bits that haven't already been assigned are set to 0. | 6307 // - The low-order bits that haven't already been assigned are set to 0. |
6307 ASSERT_EQUAL_FP64(rawbits_to_double(0x7ff82468a0000000), d13); | 6308 ASSERT_EQUAL_FP64(rawbits_to_double(0x7ff82468a0000000), d13); |
6308 ASSERT_EQUAL_FP64(rawbits_to_double(0x7ff82468a0000000), d14); | 6309 ASSERT_EQUAL_FP64(rawbits_to_double(0x7ff82468a0000000), d14); |
6309 | 6310 |
6310 TEARDOWN(); | 6311 TEARDOWN(); |
6311 } | 6312 } |
6312 | 6313 |
(...skipping 4458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10771 if (RelocInfo::IsVeneerPool(info->rmode())) { | 10772 if (RelocInfo::IsVeneerPool(info->rmode())) { |
10772 ASSERT(info->data() == veneer_pool_size); | 10773 ASSERT(info->data() == veneer_pool_size); |
10773 ++pool_count; | 10774 ++pool_count; |
10774 } | 10775 } |
10775 } | 10776 } |
10776 | 10777 |
10777 ASSERT(pool_count == 2); | 10778 ASSERT(pool_count == 2); |
10778 | 10779 |
10779 TEARDOWN(); | 10780 TEARDOWN(); |
10780 } | 10781 } |
OLD | NEW |