Index: i386.c =================================================================== --- i386.c (revision 195133) +++ i386.c (working copy) @@ -42082,7 +42082,7 @@ static unsigned HOST_WIDE_INT ix86_memmodel_check (unsigned HOST_WIDE_INT val) { unsigned HOST_WIDE_INT model = val & MEMMODEL_MASK; - unsigned HOST_WIDE_INT strong; + bool strong; if (val & ~(unsigned HOST_WIDE_INT)(IX86_HLE_ACQUIRE|IX86_HLE_RELEASE |MEMMODEL_MASK) Index: sync.md =================================================================== --- sync.md (revision 195133) +++ sync.md (working copy) @@ -101,9 +101,11 @@ [(match_operand:SI 0 "const_int_operand")] ;; model "" { + enum memmodel model = (enum memmodel) (INTVAL (operands[0]) & MEMMODEL_MASK); + /* Unless this is a SEQ_CST fence, the i386 memory model is strong enough not to require barriers of any kind. */ - if (INTVAL (operands[0]) == MEMMODEL_SEQ_CST) + if (model == MEMMODEL_SEQ_CST) { rtx (*mfence_insn)(rtx); rtx mem; @@ -200,7 +202,7 @@ UNSPEC_MOVA))] "" { - enum memmodel model = (enum memmodel) INTVAL (operands[2]); + enum memmodel model = (enum memmodel) (INTVAL (operands[2]) & MEMMODEL_MASK); if (mode == DImode && !TARGET_64BIT) {