Assuming this is enough precision for layout, I'd like to see neon
versions before we landed anything like this. Will the API a user sees
look the same? In other words, is the change localized to MaybeAuto's
implementation?

Also, speaking of these SIMD optimizations, does rustc have a compiler
flag available to switch on the optimized versions? Will we have to do
configure-style feature detection?

jack.

On Mon, Apr 14, 2014 at 11:00 PM, Patrick Walton <pcwal...@mozilla.com> wrote:
> Hi everyone,
>
> I'm considering using 32-bit fixed-point (16 bits for the fraction, 16 bits
> for the integer portion) for percentages in CSS. The reason is that we can
> use the following four SSE4/AVX instructions on x86 to compute two sides at
> once:
>
>    ; xmm0 contains the style values (percentage or fixed length)
>    ; xmm1 contains ~0 if the value is a percentage or 0 if the value
>    ; is fixed
>    ; xmm2 contains the value the percentages are relative to
>    0x0000000100000b68 <+8>:     vpshufd xmm2,xmm2,0x0
>    0x0000000100000b6d <+13>:    vpmulld xmm2,xmm2,xmm0
>    0x0000000100000b72 <+18>:    vpsrad xmm2,xmm2,0x10
>    0x0000000100000b77 <+23>:    vblendvps xmm0,xmm0,xmm2,xmm1
>    ; result in xmm0
>
> This is done in many places in layout: grep for `MaybeAuto` to find them.
> Almost all places where one side is computed, another side is computed too,
> and in some places, all four sides are computed, which can be done with only
> one or two more instructions in the above sequence (as XMM registers are 128
> bit).
>
> I have done a simple microbenchmark and found that using SSE4/AVX to compute
> two sides at once is 66% faster than doing it sequentially using branches.
> This is true even if percentages are not used and all branches are predicted
> correctly.
>
> Thoughts?
>
> Patrick
> _______________________________________________
> dev-servo mailing list
> dev-servo@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-servo
_______________________________________________
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo

Reply via email to