Limit the MEMSET (setmemsi pattern) and MEMCPY (movmemsi pattern) instructions to...
authorJames Bowman <james.bowman@ftdichip.com>
Tue, 29 Sep 2015 23:34:34 +0000 (23:34 +0000)
committerJames Bowman <jamesbowman@gcc.gnu.org>
Tue, 29 Sep 2015 23:34:34 +0000 (23:34 +0000)
Limit the MEMSET (setmemsi pattern) and MEMCPY (movmemsi pattern)
instructions to 0-511 bytes. There is a hardware limitation on large
MEMSET, MEMCPY operations that the library versions of memset() and
memcpy() deal with.

2015-09-29  James Bowman  <james.bowman@ftdichip.com>

* config/ft32/predicates.md (ft32_imm_operand): New predicate.
* config/ft32/ft32.md (movmemsi, setmemsi): Use ft32_imm_operand
predicate, disallow register for operand 2.

From-SVN: r228271

gcc/ChangeLog
gcc/config/ft32/ft32.md
gcc/config/ft32/predicates.md

index 8fc1ce77fd92bc51fef32003c356a9ed8c5752c5..6f9fea7bf8ecefee5cd18e008ba2e08ad257f2e0 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-29  James Bowman  <james.bowman@ftdichip.com>
+
+       * config/ft32/predicates.md (ft32_imm_operand): New predicate.
+       * config/ft32/ft32.md (movmemsi, setmemsi): Use ft32_imm_operand
+       predicate, disallow register for operand 2.
+
 2015-09-29  Aditya Kumar  <aditya.k7@samsung.com>
 
        * graphite-dependences.c (scop_get_dependences): Moved in down
index 68dc683023d3cd57b807570677313186f486cb3a..1eac74ddb7947a73c26f5794aafdad02d0c04a68 100644 (file)
 )
 
 (define_insn "movmemsi"
-  [(set (match_operand:BLK 0 "memory_operand" "=W,W,BW")
-        (match_operand:BLK 1 "memory_operand" "W,W,BW"))
-        (use (match_operand:SI 2 "ft32_rimm_operand" "r,KA,rKA"))
+  [(set (match_operand:BLK 0 "memory_operand" "=W,BW")
+        (match_operand:BLK 1 "memory_operand" "W,BW"))
+        (use (match_operand:SI 2 "ft32_imm_operand" "KA,KA"))
         (use (match_operand:SI 3))
    ]
   ""
-  "memcpy.%d3 %b0,%b1,%2 # %3!"
+  "memcpy.%d3 %b0,%b1,%2 "
 )
 
 (define_insn "setmemsi"
-  [(set (match_operand:BLK 0 "memory_operand" "=BW,BW") (unspec:BLK [
-     (use (match_operand:QI 2 "register_operand" "r,r"))
-     (use (match_operand:SI 1 "ft32_rimm_operand" "r,KA"))
+  [(set (match_operand:BLK 0 "memory_operand" "=BW") (unspec:BLK [
+     (use (match_operand:QI 2 "register_operand" "r"))
+     (use (match_operand:SI 1 "ft32_imm_operand" "KA"))
    ] UNSPEC_SETMEM))
    (use (match_operand:SI 3))
    ]
index ac800ae03f077167afb5cf6aaa36e3f92890dec6..32ca8c6b2ade0b3e59997569aa91abbab49886bb 100644 (file)
        (and (match_code "const_int")
             (match_test "IN_RANGE (INTVAL (op), -512, 511)"))))
 
+(define_predicate "ft32_imm_operand"
+  (and (match_code "const_int")
+       (match_test "IN_RANGE (INTVAL (op), -512, 511)")))
+
 (define_predicate "ft32_bwidth_operand"
   (and (match_code "const_int")
        (match_test "IN_RANGE (INTVAL (op), 1, 16)")))