diff mbox

[v2] xtensa: implement trap pattern

Message ID 1433888069-25683-1-git-send-email-jcmvbkbc@gmail.com
State New
Headers show

Commit Message

Max Filippov June 9, 2015, 10:14 p.m. UTC
gcc/
	* config/xtensa/xtensa.h (TARGET_DEBUG): New definition.
	* config/xtensa/xtensa.md (define_attr "type"): New type "trap".
	(define_insn "trap"): New definition.
---
Changes v1->v2:
- drop break.n, replace break 0, 0 with break 1, 15, coded breakpoint
  that transfers control to debugger if present.

 gcc/config/xtensa/xtensa.h  |  1 +
 gcc/config/xtensa/xtensa.md | 15 ++++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

Comments

augustine.sterling@gmail.com June 10, 2015, 2:37 p.m. UTC | #1
On Tue, Jun 9, 2015 at 3:14 PM, Max Filippov <jcmvbkbc@gmail.com> wrote:
> gcc/
>         * config/xtensa/xtensa.h (TARGET_DEBUG): New definition.
>         * config/xtensa/xtensa.md (define_attr "type"): New type "trap".
>         (define_insn "trap"): New definition.
> ---
> Changes v1->v2:
> - drop break.n, replace break 0, 0 with break 1, 15, coded breakpoint
>   that transfers control to debugger if present.

This is OK for xtensa. Please apply.
Max Filippov June 10, 2015, 3:08 p.m. UTC | #2
On Wed, Jun 10, 2015 at 5:37 PM, augustine.sterling@gmail.com
<augustine.sterling@gmail.com> wrote:
> On Tue, Jun 9, 2015 at 3:14 PM, Max Filippov <jcmvbkbc@gmail.com> wrote:
>> gcc/
>>         * config/xtensa/xtensa.h (TARGET_DEBUG): New definition.
>>         * config/xtensa/xtensa.md (define_attr "type"): New type "trap".
>>         (define_insn "trap"): New definition.
>> ---
>> Changes v1->v2:
>> - drop break.n, replace break 0, 0 with break 1, 15, coded breakpoint
>>   that transfers control to debugger if present.
>
> This is OK for xtensa. Please apply.

Applied to trunk. Thanks!

-- Max
diff mbox

Patch

diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h
index 011411c..584080b 100644
--- a/gcc/config/xtensa/xtensa.h
+++ b/gcc/config/xtensa/xtensa.h
@@ -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) |				\
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 6d84384..a577aa3 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -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"
@@ -1764,6 +1764,19 @@ 
   [(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