+2014-02-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.md ("atomic_load<mode>", "atomic_store<mode>")
+ ("atomic_compare_and_swap<mode>", "atomic_fetch_<atomic><mode>"):
+ Reject misaligned operands.
+
2014-02-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* optabs.c (expand_atomic_compare_and_swap): Allow expander to
(match_operand:SI 2 "const_int_operand")] ;; model
""
{
+ if (MEM_ALIGN (operands[1]) < GET_MODE_BITSIZE (GET_MODE (operands[1])))
+ FAIL;
+
if (<MODE>mode == TImode)
emit_insn (gen_atomic_loadti_1 (operands[0], operands[1]));
else if (<MODE>mode == DImode && !TARGET_ZARCH)
{
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
+ if (MEM_ALIGN (operands[0]) < GET_MODE_BITSIZE (GET_MODE (operands[0])))
+ FAIL;
+
if (<MODE>mode == TImode)
emit_insn (gen_atomic_storeti_1 (operands[0], operands[1]));
else if (<MODE>mode == DImode && !TARGET_ZARCH)
if (!register_operand (output, <MODE>mode))
output = gen_reg_rtx (<MODE>mode);
+ if (MEM_ALIGN (operands[2]) < GET_MODE_BITSIZE (GET_MODE (operands[2])))
+ FAIL;
+
emit_insn (gen_atomic_compare_and_swap<mode>_internal
(output, operands[2], operands[3], operands[4]));
(match_operand:SI 3 "const_int_operand")] ;; model
"TARGET_Z196"
{
+ if (MEM_ALIGN (operands[1]) < GET_MODE_BITSIZE (GET_MODE (operands[1])))
+ FAIL;
+
emit_insn (gen_atomic_fetch_<atomic><mode>_iaf
(operands[0], operands[1], operands[2]));
DONE;