aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/mt/ABI.txt
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/mt/ABI.txt')
-rw-r--r--gcc/config/mt/ABI.txt219
1 files changed, 0 insertions, 219 deletions
diff --git a/gcc/config/mt/ABI.txt b/gcc/config/mt/ABI.txt
deleted file mode 100644
index 97dfbb8..0000000
--- a/gcc/config/mt/ABI.txt
+++ /dev/null
@@ -1,219 +0,0 @@
- Copyright (C) 2005 Free Software Foundation, Inc.
-
- Copying and distribution of this file, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved.
-
---------------------------------------------------------------------------
-
- MS1 ABI
- =========
-
-Sizes and alignments
---------------------
-
- Type Size (bytes) Alignment (bytes)
-
- char 1 1
- short 2 2
- int 4 4
- unsigned 4 4
- long 4 4
- long long 8 8
- float 4 4
- double 8 8
- pointers 4 4
-
-* alignment within aggregates (structs and unions) is as above, with
- padding added if needed
-* aggregates have alignment equal to that of their most aligned
- member
-* aggregates have sizes which are a multiple of their alignment
-
-
-Floating point
---------------
-
-All emulated using IEEE floating point conventions.
-
-Registers
-----------------
-
-r0 always zero
-r1 argument register 1
-r2 argument register 2
-r3 argument register 3
-r4 argument register 4
-r5 callee must save
-r6 callee must save
-r7 call clobbers
-r8 call clobbers
-r9 call clobbers
-r10 call clobbers
-r11 function return value
-r12 frame pointer
-r13 stack pointer
-r14 linkage pointer
-r15 interrupt pointer
-
-Stack alignment 8 bytes
-
-Structures passed <= 32 bits as values, else as pointers
-
-The MS1 Stack
----------------
-
-Space is allocated as needed in the stack frame for the following at compile
-time:
-
-* Outgoing parameters beyond the fourth
-
-* All automatic arrays, automatic data aggregates, automatic
- scalars which must be addressable, and automatic scalars for
- which there is no room in registers
-
-* Compiler-generated temporary values (typically when there are
- too many for the compiler to keep them all in registers)
-
-Space can be allocated dynamically (at runtime) in the stack frame for the
-following:
-
-* Memory allocated using the alloca() function of the C library
-
-Addressable automatic variables on the stack are addressed with positive
-offsets relative to r12; dynamically allocated space is addressed with positive
-offsets from the pointer returned by alloca().
-
-Stack Frame
------------
-
- +-----------------------+
- | Parameter Word 1 |
- +-----------------------+ <-sp
- | Previous FP |
- +-----------------------+
- | Return address |
- +-----------------------+
- | Saved Registers |
- +-----------------------+
- | ... |
- +-----------------------+
- | Local Variables |
- +-----------------------+ <-fp
- | Alloca |
- +-----------------------+
- | ... |
- +-----------------------+
- | Parameter Word 2 |
- +-----------------------+
- | Parameter Word 1 |
- +-----------------------+ <-sp
-
-
-Parameter Assignment to Registers
----------------------------------
-
-Consider the parameters in a function call as ordered from left (first
-parameter) to right. GR contains the number of the next available
-general-purpose register. STARG is the address of the next available stack
-parameter word.
-
-INITIALIZE:
- Set GR=r1 and STARG to point to parameter word 1.
-
-SCAN:
- If there are no more parameters, terminate.
- Otherwise, select one of the following depending on the type
- of the next parameter:
-
- SIMPLE ARG:
-
- A SIMPLE ARG is one of the following:
-
- * One of the simple integer types which will fit into a
- general-purpose register,
- * A pointer to an object of any type,
- * A struct or union small enough to fit in a register (<= 32 bits)
- * A larger struct or union, which shall be treated as a
- pointer to the object or to a copy of the object.
- (See below for when copies are made.)
-
- If GR > r4, go to STACK. Otherwise, load the parameter value into
- general-purpose register GR and advance GR to the next general-purpose
- register. Values shorter than the register size are sign-extended or
- zero-extended depending on whether they are signed or unsigned. Then
- go to SCAN.
-
- DOUBLE or LONG LONG
-
- If GR > r3, go to STACK. Otherwise, if GR is odd, advance GR to the
- next register. Load the 64-bit long long or double value into register
- pair GR and GR+1. Advance GR to GR+2 and go to SCAN.
-
- STACK:
-
- Parameters not otherwise handled above are passed in the parameter
- words of the caller's stack frame. SIMPLE ARGs, as defined above, are
- considered to have size and alignment equal to the size of a
- general-purpose register, with simple argument types shorter than this
- sign- or zero-extended to this width. Round STARG up to a multiple of
- the alignment requirement of the parameter and copy the argument
- byte-for-byte into STARG, STARG+1, ... STARG+size-1. Set STARG to
- STARG+size and go to SCAN.
-
-
-Structure passing
------------------
-
-As noted above, code which passes structures and unions by value is implemented
-specially. (In this section, "struct" will refer to structs and unions
-inclusively.) Structs small enough to fit in a register are passed by value in
-a single register or in a stack frame slot the size of a register. Structs
-containing a single double or long long component are passed by value in two
-registers or in a stack frame slot the size of two registers. Other structs
-are handled by passing the address of the structure. In this case, a copy of
-the structure will be made if necessary in order to preserve the pass-by-value
-semantics.
-
-Copies of large structs are made under the following rules:
-
- ANSI mode K&R Mode
- --------- --------
-Normal param Callee copies if needed Caller copies
-Varargs (...) param Caller copies Caller copies
-
-In the case of normal (non-varargs) large-struct parameters in ANSI mode, the
-callee is responsible for producing the same effect as if a copy of the
-structure were passed, preserving the pass-by-value semantics. This may be
-accomplished by having the callee make a copy, but in some cases the callee may
-be able to determine that a copy is not necessary in order to produce the same
-results. In such cases, the callee may choose to avoid making a copy of the
-parameter.
-
-
-Varargs handling
-----------------
-
-No special changes are needed for handling varargs parameters other than the
-caller knowing that a copy is needed on struct parameters larger than a
-register (see above).
-
-The varargs macros set up a register save area for the general-purpose
-registers to be saved. Because the save area lies between the caller and
-callee stack frames, the saved register parameters are contiguous with
-parameters passed on the stack. A pointer advances from the register save area
-into the caller's stack frame.
-
-
-Function return values
-----------------------
-
- Type Register
- ---- --------
- int r11
- short r11
- long r11
- long long stack
- float r11
- double stack
-