diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml index 3d7aea1b59f..c8ee2d49629 100644 --- a/components/gfx/Cargo.toml +++ b/components/gfx/Cargo.toml @@ -10,6 +10,9 @@ publish = false name = "gfx" path = "lib.rs" +[features] +unstable = ["simd"] + [dependencies] app_units = "0.5" bitflags = "0.7" @@ -58,7 +61,7 @@ servo-fontconfig = "0.2.1" xml5ever = {version = "0.10"} [target.'cfg(any(target_feature = "sse2", target_feature = "neon"))'.dependencies] -simd = "0.2.0" +simd = {version = "0.2.0", optional = true} [target.'cfg(target_os = "windows")'.dependencies] dwrote = "0.4" diff --git a/components/gfx/lib.rs b/components/gfx/lib.rs index 98df742c183..e2f6eb56e04 100644 --- a/components/gfx/lib.rs +++ b/components/gfx/lib.rs @@ -3,8 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // For SIMD +#![cfg_attr(feature = "unstable", feature(cfg_target_feature))] #![cfg_attr(any(target_os = "linux", target_os = "android"), feature(allocator_api))] -#![feature(cfg_target_feature)] #![deny(unsafe_code)] @@ -53,6 +53,7 @@ extern crate servo_arc; extern crate servo_geometry; extern crate servo_url; #[macro_use] extern crate servo_atoms; +#[cfg(feature = "unstable")] #[cfg(any(target_feature = "sse2", target_feature = "neon"))] extern crate simd; extern crate smallvec; diff --git a/components/gfx/text/glyph.rs b/components/gfx/text/glyph.rs index c0e1be96da7..e765f48ee20 100644 --- a/components/gfx/text/glyph.rs +++ b/components/gfx/text/glyph.rs @@ -5,7 +5,7 @@ use app_units::Au; use euclid::Point2D; use range::{self, EachIndex, Range, RangeIndex}; -#[cfg(any(target_feature = "sse2", target_feature = "neon"))] +#[cfg(all(feature = "unstable", any(target_feature = "sse2", target_feature = "neon")))] use simd::u32x4; use std::{fmt, mem, u16}; use std::cmp::{Ordering, PartialOrd}; @@ -74,6 +74,7 @@ pub type GlyphId = u32; // TODO: make this more type-safe. const FLAG_CHAR_IS_SPACE: u32 = 0x40000000; +#[cfg(feature = "unstable")] #[cfg(any(target_feature = "sse2", target_feature = "neon"))] const FLAG_CHAR_IS_SPACE_SHIFT: u32 = 30; const FLAG_IS_SIMPLE_GLYPH: u32 = 0x80000000; @@ -591,6 +592,7 @@ impl<'a> GlyphStore { } #[inline] + #[cfg(feature = "unstable")] #[cfg(any(target_feature = "sse2", target_feature = "neon"))] fn advance_for_byte_range_simple_glyphs(&self, range: &Range, extra_word_spacing: Au) -> Au { let advance_mask = u32x4::splat(GLYPH_ADVANCE_MASK); @@ -634,13 +636,14 @@ impl<'a> GlyphStore { /// When SIMD isn't available, fallback to the slow path. #[inline] - #[cfg(not(any(target_feature = "sse2", target_feature = "neon")))] + #[cfg(not(all(feature = "unstable", any(target_feature = "sse2", target_feature = "neon"))))] fn advance_for_byte_range_simple_glyphs(&self, range: &Range, extra_word_spacing: Au) -> Au { self.advance_for_byte_range_slow_path(range, extra_word_spacing) } /// Used for SIMD. #[inline] + #[cfg(feature = "unstable")] #[cfg(any(target_feature = "sse2", target_feature = "neon"))] #[allow(unsafe_code)] fn transmute_entry_buffer_to_u32_buffer(&self) -> &[u32] { diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index d57f1cab270..016ccc43a76 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -25,6 +25,7 @@ unstable = [ "canvas_traits/unstable", "compositing/unstable", "constellation/unstable", + "gfx/unstable", ] [dependencies]