xtensa: implement trap pattern
authorjcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jun 2015 15:07:40 +0000 (15:07 +0000)
committerjcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jun 2015 15:07:40 +0000 (15:07 +0000)
2015-06-10  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
* config/xtensa/xtensa.h (TARGET_DEBUG): New definition.
* config/xtensa/xtensa.md (define_attr "type"): New type "trap".
(define_insn "trap"): New definition.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224330 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/xtensa/xtensa.h
gcc/config/xtensa/xtensa.md

index c3854fa..7c002a4 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-10  Max Filippov  <jcmvbkbc@gmail.com>
+
+       * config/xtensa/xtensa.h (TARGET_DEBUG): New definition.
+       * config/xtensa/xtensa.md (define_attr "type"): New type "trap".
+       (define_insn "trap"): New definition.
+
 2015-06-10  Richard Biener  <rguenther@suse.de>
 
        * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Split
index 615f741..fb8702c 100644 (file)
@@ -67,6 +67,7 @@ extern unsigned xtensa_current_frame_size;
 #define TARGET_THREADPTR       XCHAL_HAVE_THREADPTR
 #define TARGET_LOOPS           XCHAL_HAVE_LOOPS
 #define TARGET_WINDOWED_ABI    (XSHAL_ABI == XTHAL_ABI_WINDOWED)
+#define TARGET_DEBUG           XCHAL_HAVE_DEBUG
 
 #define TARGET_DEFAULT \
   ((XCHAL_HAVE_L32R    ? 0 : MASK_CONST16) |                           \
index 6d84384..a577aa3 100644 (file)
@@ -86,7 +86,7 @@
 ;; Attributes.
 
 (define_attr "type"
-  "unknown,jump,call,load,store,move,arith,multi,nop,farith,fmadd,fconv,fload,fstore,mul16,mul32,div32,mac16,rsr,wsr,entry"
+  "unknown,jump,call,load,store,move,arith,multi,nop,farith,fmadd,fconv,fload,fstore,mul16,mul32,div32,mac16,rsr,wsr,entry,trap"
   (const_string "unknown"))
 
 (define_attr "mode"
   [(set_attr "length" "0")
    (set_attr "type" "nop")])
 
+(define_insn "trap"
+  [(trap_if (const_int 1) (const_int 0))]
+  ""
+{
+  if (TARGET_DEBUG)
+    return "break\t1, 15";
+  else
+    return (TARGET_DENSITY ? "ill.n" : "ill");
+}
+  [(set_attr "type"    "trap")
+   (set_attr "mode"    "none")
+   (set_attr "length"  "3")])
+
 ;; Setting up a frame pointer is tricky for Xtensa because GCC doesn't
 ;; know if a frame pointer is required until the reload pass, and
 ;; because there may be an incoming argument value in the hard frame