On 06/08/14 15:14, Ramana Radhakrishnan wrote:
This is OK thanks.
Ramana
Hmm, minor nit.
(define_insn "*thumb1_movhi_insn"
[(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,*r,*h,l")
- (match_operand:HI 1 "general_operand" "l,m,l,*h,*r,I"))]
+ (match_operand:HI 1 "general_operand" "lk,m,l,*h,*r,I"))]
This would be better expressed as:
[(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,l*r,*h,l")
(match_operand:HI 1 "general_operand" "l,m,l,k*h,*r,I"))]
that is, to use the 4th alternative. That's because the use of SP in
these operations does not clobber the flags.
Similarly for the movqi pattern.
R.
thumb2.diff
gcc/ChangeLog:
2014-08-07 Marat Zakirov <m.zaki...@samsung.com>
* config/arm/thumb1.md (*thumb1_movhi_insn): Handle stack pointer.
(*thumb1_movqi_insn): Likewise.
* config/arm/thumb2.md (*thumb2_movhi_insn): Likewise.
diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md
index cd1adf4..fed741e 100644
--- a/gcc/config/arm/thumb1.md
+++ b/gcc/config/arm/thumb1.md
@@ -707,8 +707,8 @@
)
(define_insn "*thumb1_movhi_insn"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,*r,*h,l")
- (match_operand:HI 1 "general_operand" "l,m,l,*h,*r,I"))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=l,l,m,l*r,*h,l")
+ (match_operand:HI 1 "general_operand" "l,m,l,k*h,*r,I"))]
"TARGET_THUMB1
&& ( register_operand (operands[0], HImode)
|| register_operand (operands[1], HImode))"
@@ -762,7 +762,7 @@
(define_insn "*thumb1_movqi_insn"
[(set (match_operand:QI 0 "nonimmediate_operand" "=l,l,m,*r,*h,l")
- (match_operand:QI 1 "general_operand" "l, m,l,*h,*r,I"))]
+ (match_operand:QI 1 "general_operand" "lk, m,l,*h,*r,I"))]
"TARGET_THUMB1
&& ( register_operand (operands[0], QImode)
|| register_operand (operands[1], QImode))"
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md
index 029a679..983b59d 100644
--- a/gcc/config/arm/thumb2.md
+++ b/gcc/config/arm/thumb2.md
@@ -318,7 +318,7 @@
;; of the messiness associated with the ARM patterns.
(define_insn "*thumb2_movhi_insn"
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,l,r,m,r")
- (match_operand:HI 1 "general_operand" "r,I,Py,n,r,m"))]
+ (match_operand:HI 1 "general_operand" "rk,I,Py,n,r,m"))]
"TARGET_THUMB2
&& (register_operand (operands[0], HImode)
|| register_operand (operands[1], HImode))"