19d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 29d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 39d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// found in the LICENSE file. 49d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 59d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#include "src/base/cpu.h" 69d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#include "testing/gtest/include/gtest/gtest.h" 79d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 89d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgnamespace v8 { 99d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgnamespace base { 109d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 119d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgTEST(CPUTest, FeatureImplications) { 129d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org CPU cpu; 139d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 149d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org // ia32 and x64 features 159d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_sse() || cpu.has_mmx()); 169d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_sse2() || cpu.has_sse()); 179d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_sse3() || cpu.has_sse2()); 189d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_ssse3() || cpu.has_sse3()); 199d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_sse41() || cpu.has_sse3()); 209d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_sse42() || cpu.has_sse41()); 219d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 229d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org // arm features 239d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(!cpu.has_vfp3_d32() || cpu.has_vfp3()); 249d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 259d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 269d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 279d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgTEST(CPUTest, RequiredFeatures) { 289d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org CPU cpu; 299d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 309d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#if V8_HOST_ARCH_ARM 319d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_fpu()); 329d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#endif 339d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 349d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#if V8_HOST_ARCH_IA32 359d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_fpu()); 369d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_sahf()); 379d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#endif 389d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 399d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#if V8_HOST_ARCH_X64 409d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_fpu()); 419d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_cmov()); 429d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_mmx()); 439d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_sse()); 449d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org EXPECT_TRUE(cpu.has_sse2()); 459d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org#endif 469d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 479d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 489d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} // namespace base 499d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} // namespace v8 50