Commit e0727ae5 by Sandra Loosemore Committed by Sandra Loosemore

nios2.md (ld<bhw_uns>io): Add splitter for memory operand.

2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/nios2/nios2.md (ld<bhw_uns>io): Add splitter for memory
	operand.
	(ld<bh>io_signed): Likewise.
	(st<bhw>io): Likewise.
	* config/nios2/predicates.md (ldstio_memory_operand): Allow
	SMALL_INT12 constant integer operand.

From-SVN: r255493
parent df8ceba6
2017-12-07 Sandra Loosemore <sandra@codesourcery.com>
* config/nios2/nios2.md (ld<bhw_uns>io): Add splitter for memory
operand.
(ld<bh>io_signed): Likewise.
(st<bhw>io): Likewise.
* config/nios2/predicates.md (ldstio_memory_operand): Allow
SMALL_INT12 constant integer operand.
2017-12-07 Sandra Loosemore <sandra@codesourcery.com>
* config/nios2/nios2.c (nios2_symbolic_constant_allowed):
Rename to...
(nios2_large_constant_allowed): ...this. Adjust uses.
......@@ -318,12 +318,18 @@
(define_mode_attr bhw [(QI "b") (HI "h") (SI "w")])
(define_mode_attr bhw_uns [(QI "bu") (HI "hu") (SI "w")])
(define_insn "ld<bhw_uns>io"
(define_insn_and_split "ld<bhw_uns>io"
[(set (match_operand:BHW 0 "register_operand" "=r")
(unspec_volatile:BHW
[(match_operand:BHW 1 "ldstio_memory_operand" "w")] UNSPECV_LDXIO))]
""
"ld<bhw_uns>io\\t%0, %1"
"nios2_large_constant_memory_operand_p (operands[1])"
[(set (match_dup 0)
(unspec_volatile:BHW [(match_dup 1)] UNSPECV_LDXIO))]
{
operands[1] = nios2_split_large_constant_memory_operand (operands[1]);
}
[(set_attr "type" "ld")])
(define_expand "ld<bh>io"
......@@ -337,21 +343,32 @@
DONE;
})
(define_insn "ld<bh>io_signed"
(define_insn_and_split "ld<bh>io_signed"
[(set (match_operand:SI 0 "register_operand" "=r")
(sign_extend:SI
(unspec_volatile:BH
[(match_operand:BH 1 "ldstio_memory_operand" "w")] UNSPECV_LDXIO)))]
""
"ld<bh>io\\t%0, %1"
"nios2_large_constant_memory_operand_p (operands[1])"
[(set (match_dup 0)
(sign_extend:SI (unspec_volatile:BH [(match_dup 1)] UNSPECV_LDXIO)))]
{
operands[1] = nios2_split_large_constant_memory_operand (operands[1]);
}
[(set_attr "type" "ld")])
(define_insn "st<bhw>io"
(define_insn_and_split "st<bhw>io"
[(set (match_operand:BHW 0 "ldstio_memory_operand" "=w")
(unspec_volatile:BHW
[(match_operand:BHW 1 "reg_or_0_operand" "rM")] UNSPECV_STXIO))]
""
"st<bhw>io\\t%z1, %0"
"nios2_large_constant_memory_operand_p (operands[0])"
[(set (match_dup 0) (unspec_volatile:BHW [(match_dup 1)] UNSPECV_STXIO))]
{
operands[0] = nios2_split_large_constant_memory_operand (operands[0]);
}
[(set_attr "type" "st")])
......
......@@ -146,6 +146,8 @@
return (REG_P (XEXP (addr, 0))
&& CONST_INT_P (XEXP (addr, 1))
&& SMALL_INT12 (INTVAL (XEXP (addr, 1))));
else if (CONST_INT_P (addr))
return SMALL_INT12 (INTVAL (addr));
return false;
}
return memory_operand (op, mode);
......
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