This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

The Blackfin port


Analog Devices now has a blanket assignment for GCC, so I can contribute the Blackfin port.

This has a rather involved history: originally developed inside Analog, it was then worked on by various contractors, and now I've done what I could to clean it up and get it into shape for inclusion in the FSF mainline.

As far as I'm able to tell by comparing this to the original port written inside Analog, practically all code that was written by others has been removed to make sure the copyright situation is clear. There are a couple of one-liners left, but these shouldn't be a problem.

We also have a port of binutils, but that hasn't yet been cleaned up sufficiently to be contributed. It's available at http://blackfin.uclinux.org.

I would like to check this in on mainline, and on the 4.0 branch if that's ok with Mark. I'll be away for a week or so which should give people ample time to object :)


Bernd
Index: config.gcc
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config.gcc,v
retrieving revision 1.523
diff -c -p -r1.523 config.gcc
*** config.gcc	17 Mar 2005 17:35:11 -0000	1.523
--- config.gcc	19 Mar 2005 15:05:25 -0000
*************** arm*-*-*)
*** 246,251 ****
--- 246,254 ----
  	cpu_type=arm
  	extra_headers="mmintrin.h"
  	;;
+ bfin*-*)
+ 	cpu_type=bfin
+ 	;;
  ep9312*-*-*)
  	cpu_type=arm
  	;;
*************** avr-*-*)
*** 720,725 ****
--- 723,738 ----
  	tm_file="avr/avr.h dbxelf.h"
  	use_fixproto=yes
  	;;
+ bfin*-elf*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h"
+         tmake_file=bfin/t-bfin-elf
+         use_collect2=no
+         ;;  
+ bfin*-*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h"
+         tmake_file=bfin/t-bfin
+         use_collect2=no
+         ;;  
  c4x-*-rtems* | tic4x-*-rtems*)
  	tmake_file="c4x/t-c4x t-rtems c4x/t-rtems"
  	tm_file="c4x/c4x.h c4x/rtems.h rtems.h"
Index: doc/extend.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/extend.texi,v
retrieving revision 1.244
diff -c -p -r1.244 extend.texi
*** doc/extend.texi	17 Mar 2005 11:55:49 -0000	1.244
--- doc/extend.texi	19 Mar 2005 15:05:38 -0000
*************** on data in the eight bit data area.  Not
*** 1701,1706 ****
--- 1701,1713 ----
  You must use GAS and GLD from GNU binutils version 2.7 or later for
  this attribute to work correctly.
  
+ @item exception_handler
+ @cindex exception handler functions on the Blackfin processor
+ Use this attribute on the Blackfin to indicate that the specified function
+ is an exception handler.  The compiler will generate function entry and
+ exit sequences suitable for use in an exception handler when this
+ attribute is present.
+ 
  @item far
  @cindex functions which handle memory bank switching
  On 68HC11 and 68HC12 the @code{far} attribute causes the compiler to
*************** that the specified function is an interr
*** 1849,1856 ****
  generate function entry and exit sequences suitable for use in an
  interrupt handler when this attribute is present.
  
! Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and SH processors
! can be specified via the @code{interrupt_handler} attribute.
  
  Note, on the AVR, interrupts will be enabled inside the function.
  
--- 1856,1863 ----
  generate function entry and exit sequences suitable for use in an
  interrupt handler when this attribute is present.
  
! Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H, H8S, and
! SH processors can be specified via the @code{interrupt_handler} attribute.
  
  Note, on the AVR, interrupts will be enabled inside the function.
  
*************** void f () __attribute__ ((interrupt ("IR
*** 1864,1874 ****
  Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT and UNDEF@.
  
  @item interrupt_handler
! @cindex interrupt handler functions on the m68k, H8/300 and SH processors
! Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to indicate that
! the specified function is an interrupt handler.  The compiler will generate
! function entry and exit sequences suitable for use in an interrupt
! handler when this attribute is present.
  
  @item long_call/short_call
  @cindex indirect calls on ARM
--- 1871,1887 ----
  Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT and UNDEF@.
  
  @item interrupt_handler
! @cindex interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors
! Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and SH to
! indicate that the specified function is an interrupt handler.  The compiler
! will generate function entry and exit sequences suitable for use in an
! interrupt handler when this attribute is present.
! 
! @item kspisusp
! @cindex User stack pointer in interrupts on the Blackfin
! When used together with @code{interrupt_handler}, @code{exception_handler}
! or @code{nmi_handler}, code will be generated to load the stack pointer
! from the USP register in the function prologue.
  
  @item long_call/short_call
  @cindex indirect calls on ARM
*************** use the normal calling convention based 
*** 1948,1953 ****
--- 1961,1979 ----
  This attribute can be used to cancel the effect of the @option{-mlong-calls}
  option.
  
+ @item nesting
+ @cindex Allow nesting in an interrupt handler on the Blackfin processor.
+ Use this attribute together with @code{interrupt_handler},
+ @code{exception_handler} or @code{nmi_handler} to indicate that the function
+ entry code should enable nested interrupts or exceptions.
+ 
+ @item nmi_handler
+ @cindex NMI handler functions on the Blackfin processor
+ Use this attribute on the Blackfin to indicate that the specified function
+ is an NMI handler.  The compiler will generate function entry and
+ exit sequences suitable for use in an NMI handler when this
+ attribute is present.
+ 
  @item no_instrument_function
  @cindex @code{no_instrument_function} function attribute
  @opindex finstrument-functions
*************** The @code{longjmp}-like counterpart of s
*** 2102,2109 ****
  to be marked with the @code{noreturn} attribute.
  
  @item saveall
! @cindex save all registers on the H8/300, H8/300H, and H8S
! Use this attribute on the H8/300, H8/300H, and H8S to indicate that
  all registers except the stack pointer should be saved in the prologue
  regardless of whether they are used or not.
  
--- 2128,2135 ----
  to be marked with the @code{noreturn} attribute.
  
  @item saveall
! @cindex save all registers on the Blackfin, H8/300, H8/300H, and H8S
! Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to indicate that
  all registers except the stack pointer should be saved in the prologue
  regardless of whether they are used or not.
  
Index: doc/invoke.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/invoke.texi,v
retrieving revision 1.592
diff -c -p -r1.592 invoke.texi
*** doc/invoke.texi	15 Mar 2005 00:36:15 -0000	1.592
--- doc/invoke.texi	19 Mar 2005 15:05:46 -0000
*************** Objective-C and Objective-C++ Dialects}.
*** 401,406 ****
--- 401,411 ----
  @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
  -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
  
+ @emph{Blackfin Options}
+ @gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer -mcsync @gol
+ -mno-csync -mlow-64k -mno-low64k -mid-shared-library @gol
+ -mno-id-shared-library -mshared-library-id=@var{n} @gol}
+ 
  @emph{CRIS Options}
  @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
  -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
*************** that macro, which enables you to change 
*** 6728,6733 ****
--- 6733,6739 ----
  * ARC Options::
  * ARM Options::
  * AVR Options::
+ * Blackfin Options::
  * CRIS Options::
  * Darwin Options::
  * DEC Alpha Options::
*************** comply to the C standards, but it will p
*** 7179,7184 ****
--- 7185,7239 ----
  size.
  @end table
  
+ @node Blackfin Options
+ @subsection Blackfin Options
+ @cindex Blackfin Options
+ 
+ @item -momit-leaf-frame-pointer
+ @opindex momit-leaf-frame-pointer
+ Don't keep the frame pointer in a register for leaf functions.  This
+ avoids the instructions to save, set up and restore frame pointers and
+ makes an extra register available in leaf functions.  The option
+ @option{-fomit-frame-pointer} removes the frame pointer for all functions
+ which might make debugging harder.
+ 
+ @item -mcsync
+ @opindex mcsync
+ When enabled, the compiler will ensure that the generated code does not
+ contain speculative loads after jump instructions.  This option is enabled
+ by default.
+ 
+ @item -mno-csync
+ @opindex mno-csync
+ Don't generate extra code to prevent speculative loads from occurring.
+ 
+ @item -mlow-64k
+ @opindex
+ When enabled, the compiler is free to take advantage of the knowledge that
+ the entire program fits into the low 64k of memory.
+ 
+ @item -mno-low-64k
+ @opindex mno-low-64k
+ Assume that the program is arbitrarily large.  This is the default.
+ 
+ @item -mid-shared-library
+ @opindex mid-shared-library
+ Generate code that supports shared libraries via the library ID method.
+ This allows for execute in place and shared libraries in an environment
+ without virtual memory management.  This option implies @option{-fPIC}.
+ 
+ @item -mno-id-shared-library
+ @opindex mno-id-shared-library
+ Generate code that doesn't assume ID based shared libraries are being used.
+ This is the default.
+ 
+ @item -mshared-library-id=n
+ @opindex mshared-library-id
+ Specified the identification number of the ID based shared library being
+ compiled.  Specifying a value of 0 will generate more compact code, specifying
+ other values will force the allocation of that number to the current
+ library but is no more space or time efficient than omitting this option.
+ 
  @node CRIS Options
  @subsection CRIS Options
  @cindex CRIS Options

Attachment: bfin-config.tar.bz2
Description: BZip2 compressed data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]