On 06/23/2011 03:50 PM, Andrew MacLeod wrote:
>       * doc/extend.texi (__sync_mem_load): Document.
>       * c-family/c-common.c (resolve_overloaded_builtin): Add 
>       BUILT_IN_SYNC_MEM_LOAD_N.
>       * optabs.c (expand_sync_mem_load): New.
>       * optabs.h (enum direct_optab_index): Add DOI_sync_mem_load.
>       (sync_mem_load_optab): Define.
>       * genopinit.c: Add entry for sync_mem_load.
>       * builtins.c (expand_builtin_sync_mem_load): New.
>       (expand_builtin): Handle BUILT_IN_SYNC_MEM_LOAD_*
>       * sync-bultins.def: Add entries for BUILT_IN_SYNC_MEM_LOAD_*.
>       * testsuite/gcc.dg/sync-mem-invalid.c: Add invalid load tests.
>       * testsuite/gcc.dg/sync-mem.h: Add load executable tests.
>       * builtin-types.def (BT_FN_I{1,2,4,8,16}_VPTR_INT): New.
>       * expr.h (expand_sync_mem_load): Declare.
>       * fortran/types.def (BT_FN_I{1,2,4,8,16}_VPTR_INT): New.
>       * config/i386/sync.md (sync_mem_load<mode>): New pattern.

Looks good.

> + (define_expand "sync_mem_load<mode>"
> +   [(match_operand:SWI 0 "register_operand" "")          ;; output
> +    (match_operand:SWI 1 "memory_operand" "")            ;; memory
> +    (match_operand:SI  2 "const_int_operand" "")]        ;; memory model
> +    ""
> + {
> +   if (INTVAL (operands[2]) == MEMMODEL_ACQUIRE || 
> +       INTVAL (operands[2]) == MEMMODEL_SEQ_CST)
> +     expand_builtin_sync_synchronize ();
> +   ix86_expand_move (<MODE>mode, operands);
> +   DONE;
> + })

Formatting error (|| operator on next line).

Invoke gen_memory_barrier directly instead of a
call back into expand_builtin_sync_synchronize.

Isn't there a MEMMODEL setting that would call for the
use of LFENCE instead of MFENCE?


r~

Reply via email to