The O64 ABI is almost identical to the classic 32-bit MIPS ABI. The differences are enumerated below.
void f() { g(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); }
all arguments beginning with 5 are passed on the stack.
The argument 6 is placed 8 bytes beyond argument
5 -- not 4 bytes as it would be in 32-bit mode.
In little-endian mode, arguments are packed towards the
lower-address side of the 8-byte slot; in big-endian mode, they are
packed towards the upper-address side.
$f12 and
$f14. If the first is a 32-bit value and the second is a
64-bit value, they are passed in $f12 and
$f13. If they are both 64-bit values, they are passed in
$f12 and $f13.
e_flags field in the ELF header for object files generated
using this ABI contains E_MIPS_ABI_O64, which has the value
0x2000.
Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.
These pages are maintained by the GCC team.
For questions related to the use of GCC, please consult these web pages and the GCC manuals. If that fails, the gcc-help@gcc.gnu.org mailing list might help.Copyright (C) Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
| Last modified 2007-07-25 |
|