1d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers/*
2d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * Copyright (C) 2014 The Android Open Source Project
3d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers *
4d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License");
5d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * you may not use this file except in compliance with the License.
6d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * You may obtain a copy of the License at
7d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers *
8d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers *      http://www.apache.org/licenses/LICENSE-2.0
9d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers *
10d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * Unless required by applicable law or agreed to in writing, software
11d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS,
12d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * See the License for the specific language governing permissions and
14d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers * limitations under the License.
15d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers */
16d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers
17d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers#include "instruction_set_features_x86_64.h"
18d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers
19d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers#include <gtest/gtest.h>
20d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers
21d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogersnamespace art {
22d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers
23d582fa4ea62083a7598dded5b82dc2198b3daac7Ian RogersTEST(X86_64InstructionSetFeaturesTest, X86Features) {
24d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  std::string error_msg;
25d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  std::unique_ptr<const InstructionSetFeatures> x86_64_features(
26d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers      InstructionSetFeatures::FromVariant(kX86_64, "default", &error_msg));
27d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  ASSERT_TRUE(x86_64_features.get() != nullptr) << error_msg;
28d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  EXPECT_EQ(x86_64_features->GetInstructionSet(), kX86_64);
29d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  EXPECT_TRUE(x86_64_features->Equals(x86_64_features.get()));
303f67e692860d281858485d48a4f1f81b907f1444Aart Bik  EXPECT_STREQ("smp,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt",
31d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers               x86_64_features->GetFeatureString().c_str());
32d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers  EXPECT_EQ(x86_64_features->AsBitmap(), 1U);
33d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers}
34d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers
35d582fa4ea62083a7598dded5b82dc2198b3daac7Ian Rogers}  // namespace art
36