X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Fconfig%2Fd30v%2Fabi;fp=gcc%2Fconfig%2Fd30v%2Fabi;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=c706e94f63fd6b7188e10318637d37a716790380;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/d30v/abi b/gcc/config/d30v/abi deleted file mode 100644 index c706e94f..00000000 --- a/gcc/config/d30v/abi +++ /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