]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/config/d30v/abi
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / config / d30v / abi
diff --git a/gcc/config/d30v/abi b/gcc/config/d30v/abi
deleted file mode 100644 (file)
index c706e94..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
--*- Text -*-
-
-This document describes the proposed ABI for the D30V processor.  This is
-revision 2 of the document.
-
-Revision history:
-
-Revision 1:
-       Original revision of this document.
-
-Revision 2:
-       Done after consultation with Mitsubshi about the calling sequence.
-       This revision now reduces the number of registers the compiler will not
-       touch from 18 registers down to 8.
-
-       Register 1 is now a normal temporary register, since mvfacc rx,ay,32 is
-       legal.
-
-       Arguments greater than 4 bytes must be passed in an even register or at
-       a double word alignment.
-
-       The va_list type is a structure, not a char *.
-
-       The stack must be aligned to 8 byte boundary.  Doubles and long longs
-       must also be aligned to 8 byte boundaries.
-
-       System calls are specified via trap 31.
-
-Revision 3:
-       I added discussion about compiler switches.
-
-Register usage:
-===============
-
-       Registers       Call Status     Usage
-       ---------       -----------     -----
-       R0              hardware        Hardwired to 0
-       R1              volatile        temp
-       R2              volatile        Arg 1 and main return value.
-       R3              volatile        Arg 2 and low bits of 64 bit returns
-       R4 - R17        volatile        Args 3-16
-       R18             volatile        Static chain if used
-       R19 - R25       volatile        temps
-       R26 - R33       saved           Reserved for user use
-       R34 - R60       saved           Registers preserved across calls
-       R61             saved           Frame pointer if needed.
-       R62             saved           Return address pointer (hardware)
-       R63             saved           Stack pointer
-       CR0 - CR3       hardware        {normal,backup} {psw,pc}
-       CR4 - CR6       hardware        Reserved for future use
-       CR7 - CR9       volatile        Repeat count, addresses
-       CR10 - CR11     saved           Modulo start/end
-       CR12 - CR14     hardware        Reserved for future use
-       CR15 - CR17     hardware        Interrupt support
-       F0 - F1         volatile        Execution flags
-       F2 - F3         volatile        General flags
-       F4 - F7         volatile        Special purpose flags
-       A0              volatile        Accumulator
-       A1              saved           Accumulator
-
-Notes on the register usage:
-============================
-
-   1)  R61 will hold the frame pointer if it is needed.  Normally the frame
-       pointer will not be needed, in which case this will become another
-       saved register.
-
-   2)  Repeat instructions and delayed branches cannot cross call boundaries.
-       Similarly, all flags are assumed to not be preserved across calls.
-
-   3)  Since so many registers are available, I reserved 8 registers (r26-r33)
-       for the user to use for any purpose (global variables, interrupt
-       routines, thread pointer, etc.).  These registers will not be used by
-       the compiler for any purpose.
-
-   4)  One of the two accumulators is saved across calls.
-
-   5)  Doubles and long longs will only be allocated to even/odd register
-       pairs to allow use of the ld2w/st2w instructions.
-
-Miscellaneous call information:
-===============================
-
-   1)  Structures are passed in registers, rounding them up to word
-       boundaries.
-
-   2)  Any argument that is greater than word size (4 bytes) must be aligned
-       to a double word boundary and/or start in an even register.  The
-       intention here is to be able to use the ld2w/st2w instructions for
-       moving doubles and long longs.
-
-   3)  Variable argument functions are called with the same calling sequence
-       as non-variable argument functions.  When called, a variable argument
-       function first saves the 16 registers (R2 - R17) used for passing
-       arguments.  The va_list type is a structure.  The first element of the
-       structure is a pointer to the first word saved on the stack, and the
-       second element is a number that gives which argument number is being
-       processed.
-
-   4)  Word and double word sized structures/unions are returned in registers,
-       other functions returning structures expect a temporary area address to
-       be passed as the first argument.
-
-
-The stack frame when a function is called looks like:
-
-high           |  ....                         |
-               +-------------------------------+
-               | Argument word #20             |
-               +-------------------------------+
-               | Argument word #19             |
-               +-------------------------------+
-               | Argument word #18             |
-               +-------------------------------+
-               | Argument word #17             |
-low    SP----> +-------------------------------+
-
-After the prologue is executed, the stack frame will look like:
-
-high           |  ....                         |
-               +-------------------------------+
-               | Argument word #20             |
-               +-------------------------------+
-               | Argument word #19             |
-               +-------------------------------+
-               | Argument word #18             |
-               +-------------------------------+
-               | Argument word #17             |
-       Prev sp +-------------------------------+
-               |                               |
-               | Save for arguments 1..16 if   |
-               | the func. uses stdarg/varargs |
-               |                               |
-               +-------------------------------+
-               |                               |
-               | Save area for preserved regs  |
-               |                               |
-               +-------------------------------+
-               |                               |
-               | Local variables               |
-               |                               |
-               +-------------------------------+
-               |                               |
-               | alloca space if used          |
-               |                               |
-               +-------------------------------+
-               |                               |
-               | Space for outgoing arguments  |
-               |                               |
-low    SP----> +-------------------------------+
-
-System Calls
-============
-
-System calls will be done using "TRAP 31".  Input arguments will be in R2 - R5,
-and the system call number will be in R6.  Return values from the system call
-will be in R2.  Negative values of the return indicate the system call failed,
-and the value is the negative of the error code.  Here are the assigned system
-call numbers (value in R6):
-
-       exit    1
-       open    2
-       close   3
-       read    4
-       write   5
-       lseek   6
-       unlink  7
-       getpid  8
-       kill    9
-       fstat   10
-                       (11 is reserved for sbrk)
-       argvlen 12
-       argv    13
-       chdir   14
-       stat    15
-       chmod   16
-       utime   17
-       time    18
-
-Compiler Switches
-=================
-
-The following d30v specific compiler switches are currently supported:
-
-    -mextmem           Link .text/.data/.bss/etc in external memory.
-
-    -mextmemory                Same as -mextmem.
-
-    -monchip           Link .text/.data/.bss/etc in the onchip data/text
-                       memory.
-
-    -mno-asm-optimize  Do not pass -O to the assembler when optimizing (the -O
-                       switch will mark two short instructions that don't
-                       interfere with each other as being done parallel
-                       instead of sequentially).
-
-    -masm-optimize     [default] If optimizing, pass -O to the assembler.
-
-    -mbranch-cost=n    Increase the internal costs of branches to n.  Higher
-                       costs means that the compiler will issue more
-                       instructions to avoid doing a branch. The default is
-                       2.
-
-    -mcond-exec=n      Replace branches around n insns with conditional
-                       execution if we can.  Default is 4.
-
-
-Sections
-========
-
-You can override the effect of the -mextmem/-monchip options by putting
-functions into either the ".stext" or ".etext" sections.  If you put them into
-the ".stext" section, the linker will always link the function into the onchip
-memory area.  Similarly, if you put the function in the ".etext" section, the
-linker will always link the function into the external memory area.
-
-Data can be controlled as well.  If you put the data in the ".sdata" section,
-the linker will put the data into the onchip data area.  Similarly, if you put
-the data in the ".edata" section, the linker will put the data into the
-external memory.
-
-
-Stack pointer
-=============
-
-The crt0.o that we ship loads up the stack pointer with the value of the label
-__stack.  If you do not define a value for __stack, the linker will choose the
-top of the onchip data area (0x20008000) for the stack pointer.  You can set a
-new value via the options:
-
-       -Wl,-defsym,__stack=0x20008000