On Thu, Jan 30, 2014 at 1:50 PM, Ilya Tocar <tocarip.in...@gmail.com> wrote:

> I've found some problems with embedded rounding implementation.
> First constants are already defined in smmintrin.h, so we shouldn't
> redefine them.
> Second problem is bigger: currently rounding argument to intrinsic
> is one of _MM_FROUND_TO_NEAREST_INT, _MM_FROUND_TO_NEG_INF,
> _MM_FROUND_TO_POS_INF, _MM_FROUND_TO_ZERO, _MM_FROUND_CUR_DIRECTION,
> _MM_FROUND_NO_EXC, but actually it should be
> _MM_FROUND_NO_EXC or _MM_FROUND_CUR_DIRECTION for SAE and
> _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC for rounding. That's
> how Icc does it, because while currently rounding implies sae it may be
> not true in future. I've splited rounding and sae in print_operand into
> 'R' and 'r' because we can't distinguish between 8 and 8 | 0. I've
> also run sed on tests to correct rounding arguments. While patch is huge
> most of it is result of sed. It bootstraps, passes make check/SPEC2006.i
> Ok for trunk?
>
> Here is ChangeLog.
>
> 2014-01-30  Ilya Tocar  <ilya.to...@intel.com>
>
>         * config/i386/avx512fintrin.h (_MM_FROUND_TO_NEAREST_INT),
>         (_MM_FROUND_TO_NEG_INF), (_MM_FROUND_TO_POS_INF),
>         (_MM_FROUND_TO_ZERO), (_MM_FROUND_CUR_DIRECTION): Are already defined
>         in smmintrin.h, remove them.
>         (_MM_FROUND_NO_EXC): Same as above, bit also wrong value.
>         * config/i386/i386.c (ix86_print_operand): Split sae and rounding.
>         * config/i386/i386.md (ROUND_SAE): Fix value.
>         * config/i386/predicates.md (const_4_or_8_to_11_operand): New.
>         (const48_operand): New.
>         * config/i386/subst.md (round), (round_expand): Use
>         const_4_or_8_to_11_operand.
>         (round_saeonly), (round_saeonly_expand): Use const48_operand.
>
> 2014-01-30  Ilya Tocar  <ilya.to...@intel.com>
>
>         * gcc.target/i386/avx-1.c: Use correct rounding values.
>         * gcc.target/i386/avx512f-vaddpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vaddps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vaddsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vaddss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtdq2ps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtpd2dq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtpd2ps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtpd2udq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtps2dq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtps2udq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsd2si-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsd2si64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsd2ss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsd2usi-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsd2usi64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsi2sd64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsi2ss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtsi2ss64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtss2si-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtss2si64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtss2usi-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtss2usi64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtudq2ps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtusi2sd64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtusi2ss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vcvtusi2ss64-1.c: Ditto.
>         * gcc.target/i386/avx512f-vdivpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vdivps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vdivsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vdivss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddXXXsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddXXXss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddsubXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmaddsubXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubXXXsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubXXXss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubaddXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfmsubaddXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmaddXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmaddXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmaddXXXsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmaddXXXss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmsubXXXpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmsubXXXps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmsubXXXsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vfnmsubXXXss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vmulpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vmulps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vmulsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vmulss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vscalefpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vscalefps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vscalefsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vscalefss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsqrtpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsqrtps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsqrtsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsqrtss-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsubpd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsubps-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsubsd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vsubss-1.c: Ditto.
>         * gcc.target/i386/sse-13.c: Ditto.
>         * gcc.target/i386/sse-14.c: Ditto.
>         * gcc.target/i386/sse-22.c: Ditto.
>         * gcc.target/i386/sse-23.c: Ditto.

OK, at least the non-trivial part. I gave up on the mechanical part.

Thanks,
Uros.

Reply via email to