Hello guys,
After conversation in IRC with Richard, I've slightly updated the patch.
1. According to Richards suggestion I moved PTA_HLE to `generic` march.
2. Applied and updated Andi's patch (see [1]).
3. Updated tests to use proper memory model combintations
4. Added 1-sentense description to extend.texi to mention

Since, I've changed i386 part, I thing Uros's OK is also needed.

ChangeLog entry:
2012-04-27  Kirill Yukhin  <kirill.yuk...@intel.com>
            Andi Kleen <a...@linux.intel.com>

        * coretypes (MEMMODEL_MASK): New.
        * builtins.c (get_memmodel): Add val. Call target.memmodel_check
        and return new variable.
        (expand_builtin_atomic_exchange):  Mask memmodel values.
        (expand_builtin_atomic_compare_exchange): Ditto.
        (expand_builtin_atomic_load): Ditto.
        (expand_builtin_atomic_store): Ditto.
        (expand_builtin_atomic_clear): Ditto.
        * doc/extend.texi: Mention port-dependent memory model flags.
        * config/i386/cpuid.h (bit_HLE): New.
        * config/i386/driver-i386.c (host_detect_local_cpu): Detect
        HLE support.
        * config/i386/i386-protos.h (ix86_generate_hle_prefix): New.
        * config/i386/i386-c.c (ix86_target_macros_internal): Set
        HLE defines.
        (ix86_target_string)<-mhle>: New.
        (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto.
        * config/i386/i386.c (ix86_target_string)<OPTION_MASK_ISA_HLE>:
        New.
        (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto.
        (ix86_option_override_internal)<PTA_HLE>: New switch, set it
        enabled for generic and generic64.
        (ix86_print_operand): Generate HLE lock prefixes.
        (ix86_memmodel_check): New.
        (TARGET_MEMMODEL_CHECK): Ditto.
        * config/i386/i386.h (OPTION_ISA_HLE): Ditto.
        (IX86_HLE_ACQUIRE): Ditto.
        (IX86_HLE_RELEASE): Ditto.
        * config/i386/i386.h (ix86_generate_hle_prefix): Ditto.
        * config/i386/i386.opt (mhle): Ditto.
        * config/i386/sync.md(atomic_compare_and_swap<mode>): Pass
        success model to instruction emitter.
        (atomic_fetch_add<mode>): Ditto.
        (atomic_exchange<mode>): Ditto.
        (atomic_add<mode>): Ditto.
        (atomic_sub<mode>): Ditto.
        (atomic_<code><mode>): Ditto.
        (*atomic_compare_and_swap_doubledi_pic): Ditto.
        (atomic_compare_and_swap_single<mode>): Define and use argument
        for success model.
        (atomic_compare_and_swap_double<mode>): Ditto.
        * configure.ac: Check if assembler support HLE prefixes.
        * configure: Regenerate.
        * config.in: Ditto.

testsuite/ChageLog entry:
2012-04-27  Kirill Yukhin  <kirill.yuk...@intel.com>

        * gcc.target/i386/hle-cmpxchg-acq-1.c: New.
        * gcc.target/i386/hle-cmpxchg-rel-1.c: Ditto.
        * gcc.target/i386/hle-add-acq-1.c: Ditto.
        * gcc.target/i386/hle-add-rel-1.c: Ditto.
        * gcc.target/i386/hle-and-acq-1.c: Ditto.
        * gcc.target/i386/hle-and-rel-1.c: Ditto.
        * gcc.target/i386/hle-or-acq-1.c: Ditto.
        * gcc.target/i386/hle-or-rel-1.c: Ditto.
        * gcc.target/i386/hle-sub-acq-1.c: Ditto.
        * gcc.target/i386/hle-sub-rel-1.c: Ditto.
        * gcc.target/i386/hle-xadd-acq-1.c: Ditto.
        * gcc.target/i386/hle-xadd-rel-1.c: Ditto.
        * gcc.target/i386/hle-xchg-acq-1.c: Ditto.
        * gcc.target/i386/hle-xchg-rel-1.c: Ditto.
        * gcc.target/i386/hle-xor-acq-1.c: Ditto.
        * gcc.target/i386/hle-xor-rel-1.c: Ditto.

bootstrap passing. HLE tests passing. Patch attached.

OK?

[1] - http://gcc.gnu.org/ml/gcc-patches/2012-04/msg01538.html.

Thanks, K

On Thu, Apr 19, 2012 at 9:18 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Thu, Apr 19, 2012 at 5:21 PM, Kirill Yukhin <kirill.yuk...@gmail.com> 
> wrote:
>> Folks,
>> Thanks a lot for prompts!
>> I've updated my patch, so cmparing to previous it is:
>>  - have dedicated hook var, to define target dep. bits in mem model.
>> Check (and warning) is performed in get_memmodel
>>   - prefix emit performed through dedicated operand type (%K)
>
> +#else
> +         fputs ("\n" ASM_BYTE "0xf3\n\t");
> +#endif
>
> Ouch, my bad, you need to add file argument here (no need to repost
> patch because of this). FYI, you have wrong indentation here.
>
> Otherwise, OK as far as x86 is concerned, but you will need separate
> approval for middle-end part.
>
> Thanks,
> Uros.

Attachment: hle-5.gcc.patch
Description: Binary data

Reply via email to