Commit 75cc21e2 by Andreas Krebbel Committed by Andreas Krebbel

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.

From-SVN: r207601
parent f4b83d66
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
fail.
......
......@@ -9108,6 +9108,9 @@
(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)
......@@ -9149,6 +9152,9 @@
{
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)
......@@ -9203,6 +9209,9 @@
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]));
......@@ -9319,6 +9328,9 @@
(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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment