gem5  v22.1.0.0
aapcs64.test.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2020 Google, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met: redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer;
8  * redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #include <gtest/gtest.h>
29 
30 #include "arch/arm/aapcs64.hh"
31 
32 using namespace gem5;
33 
34 TEST(Aapcs64, IsAapcs64ShortVector)
35 {
36  using Scalar = uint64_t;
37  using TooShort = uint8_t[2];
38  using TooLong = uint16_t[32];
39  using TooLongFloat = double[4];
40  using EightLong = uint32_t[2];
41  using SixteenLong = uint64_t[2];
42  using EightLongFloat = float[2];
43  using SixteenLongFloat = double[2];
44 
45  EXPECT_FALSE(guest_abi::IsAapcs64ShortVectorV<Scalar>);
46  EXPECT_FALSE(guest_abi::IsAapcs64ShortVectorV<TooShort>);
47  EXPECT_FALSE(guest_abi::IsAapcs64ShortVectorV<TooLong>);
48  EXPECT_FALSE(guest_abi::IsAapcs64ShortVectorV<TooLongFloat>);
49  EXPECT_FALSE(guest_abi::IsAapcs64ShortVectorV<void>);
50 
51  EXPECT_TRUE(guest_abi::IsAapcs64ShortVectorV<EightLong>);
52  EXPECT_TRUE(guest_abi::IsAapcs64ShortVectorV<SixteenLong>);
53  EXPECT_TRUE(guest_abi::IsAapcs64ShortVectorV<EightLongFloat>);
54  EXPECT_TRUE(guest_abi::IsAapcs64ShortVectorV<SixteenLongFloat>);
55 }
56 
57 TEST(Aapcs64, IsAapcs64Hfa)
58 {
59  // Accept floating point arrays with up to 4 members.
60  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<float[1]>);
61  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<float[2]>);
62  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<float[3]>);
63  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<float[4]>);
64 
65  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<double[1]>);
66  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<double[2]>);
67  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<double[3]>);
68  EXPECT_TRUE(guest_abi::IsAapcs64HfaV<double[4]>);
69 
70  // Too many members.
71  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<float[5]>);
72  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<double[5]>);
73 
74  // Wrong type of members, or not arrays.
75  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<int32_t[3]>);
76  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<float>);
77  struct Struct {};
78  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<Struct>);
79  EXPECT_FALSE(guest_abi::IsAapcs64HfaV<void>);
80 }
81 
82 TEST(Aapcs64, IsAapcs64Hva)
83 {
84  using SvaInt = uint32_t[2];
85  using SvaTiny = uint8_t[16];
86  using SvaFloat = float[2];
87 
88  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaInt[3]>);
89  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaInt[4]>);
90  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<SvaInt[5]>);
91 
92  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaFloat[3]>);
93  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaFloat[4]>);
94  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<SvaFloat[5]>);
95 
96  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaTiny[3]>);
97  EXPECT_TRUE(guest_abi::IsAapcs64HvaV<SvaTiny[4]>);
98  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<SvaTiny[5]>);
99 
100  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<uint64_t>);
101  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<uint64_t[1]>);
102  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<SvaTiny>);
103  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<void>);
104  EXPECT_FALSE(guest_abi::IsAapcs64HvaV<float>);
105 }
106 
107 TEST(Aapcs64, IsAapcs64Hxa)
108 {
109  using SvaInt = uint32_t[2];
110 
111  EXPECT_TRUE(guest_abi::IsAapcs64HxaV<SvaInt[4]>);
112  EXPECT_FALSE(guest_abi::IsAapcs64HxaV<SvaInt[5]>);
113 
114  EXPECT_TRUE(guest_abi::IsAapcs64HxaV<float[4]>);
115  EXPECT_FALSE(guest_abi::IsAapcs64HxaV<float[5]>);
116 
117  EXPECT_FALSE(guest_abi::IsAapcs64HxaV<SvaInt>);
118  EXPECT_FALSE(guest_abi::IsAapcs64HxaV<uint64_t>);
119  EXPECT_FALSE(guest_abi::IsAapcs64HxaV<void>);
120 }
TEST(Aapcs64, IsAapcs64ShortVector)
Definition: aapcs64.test.cc:34
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1931
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....

Generated on Wed Dec 21 2022 10:22:24 for gem5 by doxygen 1.9.1