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