Hi,
This patch adds new intrinsics for new ADCX, ADOX, RDSEED and
PREFETCHW instructions, introduced here:
http://software.intel.com/en-us/avx/

Bootstrapped on x86-64, testing is in progress.

Is it ok for trunk?

Changelog entry:
2012-07-17  Michael Zolotukhin  <michael.v.zolotuk...@intel.com>

        * common/config/i386/i386-common.c (OPTION_MASK_ISA_RDSEED_SET): New.
        (OPTION_MASK_ISA_ADX_SET): Likewise.
        (OPTION_MASK_ISA_PRFCHW_SET): Likewise.
        (OPTION_MASK_ISA_RDSEED_UNSET): Likewise.
        (OPTION_MASK_ISA_ADX_UNSET): Likewise.
        (OPTION_MASK_ISA_PRFCHW_UNSET): Likewise.
        (ix86_handle_option): Handle mrdseed, madx and mprfchw options.
        * config.gcc (i[34567]86-*-*): Add rdseedintrin.h, adxintrin.h and
        prfchwintrin.h.
        (x86_64-*-*): Likewise.
        * config/i386/adxintrin.h: New header.
        * config/i386/prfchwintrin.h: Likewise.
        * config/i386/rdseedintrin.h: Likewise.
        * config/i386/cpuid.h (bit_RDSEED): New.
        (bit_ADX): Likewise.
        (bit_PRFCHW): Likewise.
        (bit_BMI): Formatting fix.
        (bit_HLE): Likewise.
        (bit_RTM): Likewise.
        * config/i386/driver-i386.c (host_detect_local_cpu): Detect ADCX/ADOX,
        RDSEED and PREFETCHW support.
        * config/i386/i386-builtin-types.def
        (UCHAR_FTYPE_UCHAR_UINT_UINT_PINT): New function type.
        (UCHAR_FTYPE_UCHAR_ULONGLONG_ULONGLONG_PINT): Likewise.
        * config/i386/i386-c.c: Define __RDSEED__, __ADX__, and __PRFCHW__ if
        needed.
        * config/i386/i386.c (ix86_target_string): Define -mrdseed, -madx,
        -mprfchw options. Formatting fixes.
        (PTA_HLE): Formatting fix.
        (PTA_RDSEED): New.
        (PTA_ADX): Likewise.
        (PTA_PRFCHW): Likewise.
        (ix86_option_override_internal): Handle new options.
        (ix86_valid_target_attribute_inner_p): Add OPT_mrdseed, OPT_madx, and
        OPT_mprfchw.
        (ix86_builtins): Add IX86_BUILTIN_ADDXCARRY32,
        IX86_BUILTIN_ADDXCARRY64, IX86_BUILTIN_RDSEED16,
        IX86_BUILTIN_RDSEED32, IX86_BUILTIN_RDSEED64.
        (ix86_init_mmx_sse_builtins): Define corresponding built-ins.
        (ix86_expand_builtin): Handle these built-ins.
        (ix86_expand_args_builtin): Handle new function types.
        * config/i386/i386.h (TARGET_RDSEED): New.
        (TARGET_ADX): Likewise.
        (TARGET_PRFCHW): Likewise.
        * config/i386/i386.md (UNSPEC_ADCX): New.
        (UNSPEC_RDSEED): Likewise.
        (attributes): Add rdseed, adx, prfchw.
        (adcx<mode>): New define_insn.
        (rdseed<mode>): Likewise.
        (prefetch): Enable for TARGET_PRFCHW.
        (prefetchw_<mode>): New define_insn for write-prefetch.
        (prefetch_3dnow_<mode>): Keep only read-prefetch here.
        * config/i386/i386.opt (mrdseed): New.
        (madx): Likewise.
        (mprfchw): Likewise.
        * config/i386/mm3dnow.h: Move _m_prefetchw from here to
        prfchwintrin.h.
        * config/i386/x86intrin.h: Include prfchwintrin.h, rdseedintrin.h,
        adxintrin.h.

testsuite/Changelog entry:
2012-07-17  Michael Zolotukhin  <michael.v.zolotuk...@intel.com>

        * gcc.target/i386/adx-addxcarry32-1.c: New.
        * gcc.target/i386/adx-addxcarry32-2.c: New.
        * gcc.target/i386/adx-addxcarry64-1.c: New.
        * gcc.target/i386/adx-addxcarry64-2.c: New.
        * gcc.target/i386/adx-check.h: New.
        * gcc.target/i386/i386.exp: New.
        * gcc.target/i386/prefetchw-1.c: New.
        * gcc.target/i386/rdseed16-1.c: New.
        * gcc.target/i386/rdseed32-1.c: New.
        * gcc.target/i386/rdseed64-1.c: New.

-- 
---
Best regards,
Michael V. Zolotukhin,
Software Engineer
Intel Corporation.

Attachment: adx_rdseed_prefetchw_intrin.patch
Description: Binary data

Reply via email to