diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2015-06-10 15:07:40 +0000 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gcc.gnu.org> | 2015-06-10 15:07:40 +0000 |
commit | 768b666466931611b0b39f125cb0645b1cf3d102 (patch) | |
tree | d4d920838332a9d9137029872029f6a5afae5272 /gcc | |
parent | b266b96856da702dbe957396adc6f242daed233b (diff) | |
download | gcc-768b666466931611b0b39f125cb0645b1cf3d102.zip gcc-768b666466931611b0b39f125cb0645b1cf3d102.tar.gz gcc-768b666466931611b0b39f125cb0645b1cf3d102.tar.bz2 |
xtensa: implement trap pattern
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.
From-SVN: r224330
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.h | 1 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.md | 15 |
3 files changed, 21 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3854fa..7c002a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 615f741..fb8702c 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 |