Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gcc: add xtensa-specific patches for 5.2.0
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
- Loading branch information
Showing
1 changed file
with
64 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
From d462e776df56a72f68545054f6d722bf447f0519 Mon Sep 17 00:00:00 2001 | ||
From: Max Filippov <jcmvbkbc@gmail.com> | ||
Date: Mon, 8 Jun 2015 22:29:11 +0300 | ||
Subject: [PATCH] xtensa: implement trap pattern | ||
|
||
gcc/ | ||
* config/xtensa/xtensa.h (TARGET_DEBUG): New definition. | ||
* config/xtensa/xtensa.md (define_attr "type"): New type "trap". | ||
(define_insn "trap"): New definition. | ||
|
||
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> | ||
--- | ||
gcc/config/xtensa/xtensa.h | 1 + | ||
gcc/config/xtensa/xtensa.md | 15 ++++++++++++++- | ||
2 files changed, 15 insertions(+), 1 deletion(-) | ||
|
||
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 | ||
-- | ||
1.8.1.4 | ||
|