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