Commit 7d73b2cb by DJ Delorie Committed by DJ Delorie

predicates.md (rl78_near_mem_operand): New.

* config/rl78/predicates.md (rl78_near_mem_operand): New.
* config/rl78/rl78-virt.md (movqi_virt_mm, movqi_virt)
(movhi_virt_mm): Split out near mem-mem moves to avoid problems
with far-far moves.

From-SVN: r213998
parent 3230c614
...@@ -11,6 +11,11 @@ ...@@ -11,6 +11,11 @@
2014-08-14 DJ Delorie <dj@redhat.com> 2014-08-14 DJ Delorie <dj@redhat.com>
* config/rl78/predicates.md (rl78_near_mem_operand): New.
* config/rl78/rl78-virt.md (movqi_virt_mm, movqi_virt)
(movhi_virt_mm): Split out near mem-mem moves to avoid problems
with far-far moves.
* config/rl78/rl78-expand.md (umulqihi3): Disable for G10. * config/rl78/rl78-expand.md (umulqihi3): Disable for G10.
* config/rl78/rl78-virt.md (umulhi3_shift_virt): Likewise. * config/rl78/rl78-virt.md (umulhi3_shift_virt): Likewise.
(umulqihi3_virt): Likewise. (umulqihi3_virt): Likewise.
......
...@@ -33,6 +33,11 @@ ...@@ -33,6 +33,11 @@
(not (match_test "rl78_far_p (op)"))) (not (match_test "rl78_far_p (op)")))
) )
(define_predicate "rl78_near_mem_operand"
(and (match_code "mem")
(match_test "!rl78_far_p (op) && rl78_as_legitimate_address (VOIDmode, XEXP (op, 0), true, ADDR_SPACE_GENERIC)"))
)
(define_predicate "ubyte_operand" (define_predicate "ubyte_operand"
(and (match_code "const_int") (and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 0, 255)"))) (match_test "IN_RANGE (INTVAL (op), 0, 255)")))
......
...@@ -33,14 +33,30 @@ ...@@ -33,14 +33,30 @@
;;---------- Moving ------------------------ ;;---------- Moving ------------------------
(define_insn "*movqi_virt_mm"
[(set (match_operand:QI 0 "rl78_near_mem_operand" "=Y")
(match_operand 1 "rl78_near_mem_operand" "Y"))]
"rl78_virt_insns_ok ()"
"v.mov %0, %1"
[(set_attr "valloc" "op1")]
)
(define_insn "*movqi_virt" (define_insn "*movqi_virt"
[(set (match_operand:QI 0 "nonimmediate_operand" "=vY,v,Wfr") [(set (match_operand:QI 0 "nonimmediate_operand" "=vY,v,Wfr")
(match_operand 1 "general_operand" "vInt8JY,Wfr,vInt8J"))] (match_operand 1 "general_operand" "vInt8J,YWfr,vInt8J"))]
"rl78_virt_insns_ok ()" "rl78_virt_insns_ok ()"
"v.mov %0, %1" "v.mov %0, %1"
[(set_attr "valloc" "op1")] [(set_attr "valloc" "op1")]
) )
(define_insn "*movhi_virt_mm"
[(set (match_operand:HI 0 "rl78_near_mem_operand" "=Y")
(match_operand:HI 1 "rl78_near_mem_operand" "Y"))]
"rl78_virt_insns_ok ()"
"v.movw %0, %1"
[(set_attr "valloc" "op1")]
)
(define_insn "*movhi_virt" (define_insn "*movhi_virt"
[(set (match_operand:HI 0 "nonimmediate_operand" "=vS, Y, v, Wfr") [(set (match_operand:HI 0 "nonimmediate_operand" "=vS, Y, v, Wfr")
(match_operand:HI 1 "general_operand" "viYS, viS, Wfr, vi"))] (match_operand:HI 1 "general_operand" "viYS, viS, Wfr, vi"))]
......
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