			==========================
			KERNEL ABIS FOR METAG ARCH
			==========================

This document describes the Linux ABIs for the metag architecture, and has the
following sections:

 (*) Outline of registers
 (*) Userland registers
 (*) Kernel registers
 (*) System call ABI
 (*) Calling conventions


====================
OUTLINE OF REGISTERS
====================

The main Meta core registers are arranged in units:

	UNIT	Type	DESCRIPTION	GP	EXT	PRIV	GLOBAL
	=======	=======	===============	=======	=======	=======	=======
	CT	Special	Control unit
	D0	General	Data unit 0	0-7	8-15	16-31	16-31
	D1	General	Data unit 1	0-7	8-15	16-31	16-31
	A0	General	Address unit 0	0-3	4-7	 8-15	 8-15
	A1	General	Address unit 1	0-3	4-7	 8-15	 8-15
	PC	Special	PC unit		0		 1
	PORT	Special	Ports
	TR	Special	Trigger unit			 0-7
	TT	Special	Trace unit			 0-5
	FX	General	FP unit			0-15

GP registers form part of the main context.

Extended context registers (EXT) may not be present on all hardware threads and
can be context switched if support is enabled and the appropriate bits are set
in e.g. the D0.8 register to indicate what extended state to preserve.

Global registers are shared between threads and are privilege protected.

See arch/metag/include/asm/metag_regs.h for definitions relating to core
registers and the fields and bits they contain. See the TRMs for further details
about special registers.

Several special registers are preserved in the main context, these are the
interesting ones:

	REG	(ALIAS)		PURPOSE
	=======================	===============================================
	CT.1	(TXMODE)	Processor mode bits (particularly for DSP)
	CT.2	(TXSTATUS)	Condition flags and LSM_STEP (MGET/MSET step)
	CT.3	(TXRPT)		Branch repeat counter
	PC.0	(PC)		Program counter

Some of the general registers have special purposes in the ABI and therefore
have aliases:

	D0 REG	(ALIAS)	PURPOSE		D1 REG	(ALIAS)	PURPOSE
	===============	===============	===============	=======================
	D0.0	(D0Re0)	32bit result	D1.0	(D1Re0)	Top half of 64bit result
	D0.1	(D0Ar6)	Argument 6	D1.1	(D1Ar5)	Argument 5
	D0.2	(D0Ar4)	Argument 4	D1.2	(D1Ar3)	Argument 3
	D0.3	(D0Ar2)	Argument 2	D1.3	(D1Ar1)	Argument 1
	D0.4	(D0FrT)	Frame temp	D1.4	(D1RtP)	Return pointer
	D0.5		Call preserved	D1.5		Call preserved
	D0.6		Call preserved	D1.6		Call preserved
	D0.7		Call preserved	D1.7		Call preserved

	A0 REG	(ALIAS)	PURPOSE		A1 REG	(ALIAS)	PURPOSE
	===============	===============	===============	=======================
	A0.0	(A0StP)	Stack pointer	A1.0	(A1GbP)	Global base pointer
	A0.1	(A0FrP)	Frame pointer	A1.1	(A1LbP)	Local base pointer
	A0.2				A1.2
	A0.3				A1.3


==================
USERLAND REGISTERS
==================

All the general purpose D0, D1, A0, A1 registers are preserved when entering the
kernel (including asynchronous events such as interrupts and timer ticks) except
the following which have special purposes in the ABI:

	REGISTERS	WHEN	STATUS		PURPOSE
	===============	=======	===============	===============================
	D0.8		DSP	Preserved	ECH, determines what extended
						DSP state to preserve.
	A0.0	(A0StP)	ALWAYS	Preserved	Stack >= A0StP may be clobbered
						at any time by the creation of a
						signal frame.
	A1.0	(A1GbP)	SMP	Clobbered	Used as temporary for loading
						kernel stack pointer and saving
						core context.
	A0.15		!SMP	Protected	Stores kernel stack pointer.
	A1.15		ALWAYS	Protected	Stores kernel base pointer.

On UP A0.15 is used to store the kernel stack pointer for storing the userland
context. A0.15 is global between hardware threads though which means it cannot
be used on SMP for this purpose. Since no protected local registers are
available A1GbP is reserved for use as a temporary to allow a percpu stack
pointer to be loaded for storing the rest of the context.


================
KERNEL REGISTERS
================

When in the kernel the following registers have special purposes in the ABI:

	REGISTERS	WHEN	STATUS		PURPOSE
	===============	=======	===============	===============================
	A0.0	(A0StP)	ALWAYS	Preserved	Stack >= A0StP may be clobbered
						at any time by the creation of
						an irq signal frame.
	A1.0	(A1GbP)	ALWAYS	Preserved	Reserved (kernel base pointer).


===============
SYSTEM CALL ABI
===============

When a system call is made, the following registers are effective:

	REGISTERS	CALL			RETURN
	===============	=======================	===============================
	D0.0	(D0Re0)				Return value (or -errno)
	D1.0	(D1Re0)	System call number	Clobbered
	D0.1	(D0Ar6)	Syscall arg #6		Preserved
	D1.1	(D1Ar5)	Syscall arg #5		Preserved
	D0.2	(D0Ar4)	Syscall arg #4		Preserved
	D1.2	(D1Ar3)	Syscall arg #3		Preserved
	D0.3	(D0Ar2)	Syscall arg #2		Preserved
	D1.3	(D1Ar1)	Syscall arg #1		Preserved

Due to the limited number of argument registers and some system calls with badly
aligned 64-bit arguments, 64-bit values are always packed in consecutive
arguments, even if this is contrary to the normal calling conventions (where the
two halves would go in a matching pair of data registers).

For example fadvise64_64 usually has the signature:

	long sys_fadvise64_64(i32 fd, i64 offs, i64 len, i32 advice);

But for metag fadvise64_64 is wrapped so that the 64-bit arguments are packed:

	long sys_fadvise64_64_metag(i32 fd,      i32 offs_lo,
				    i32 offs_hi, i32 len_lo,
				    i32 len_hi,  i32 advice)

So the arguments are packed in the registers like this:

	D0 REG	(ALIAS)	VALUE		D1 REG	(ALIAS)	VALUE
	===============	===============	===============	=======================
	D0.1	(D0Ar6)	advice		D1.1	(D1Ar5)	hi(len)
	D0.2	(D0Ar4)	lo(len)		D1.2	(D1Ar3)	hi(offs)
	D0.3	(D0Ar2)	lo(offs)	D1.3	(D1Ar1)	fd


===================
CALLING CONVENTIONS
===================

These calling conventions apply to both user and kernel code. The stack grows
from low addresses to high addresses in the metag ABI. The stack pointer (A0StP)
should always point to the next free address on the stack and should at all
times be 64-bit aligned. The following registers are effective at the point of a
call:

	REGISTERS	CALL			RETURN
	===============	=======================	===============================
	D0.0	(D0Re0)				32bit return value
	D1.0	(D1Re0)				Upper half of 64bit return value
	D0.1	(D0Ar6)	32bit argument #6	Clobbered
	D1.1	(D1Ar5)	32bit argument #5	Clobbered
	D0.2	(D0Ar4)	32bit argument #4	Clobbered
	D1.2	(D1Ar3)	32bit argument #3	Clobbered
	D0.3	(D0Ar2)	32bit argument #2	Clobbered
	D1.3	(D1Ar1)	32bit argument #1	Clobbered
	D0.4	(D0FrT)				Clobbered
	D1.4	(D1RtP)	Return pointer		Clobbered
	D{0-1}.{5-7}				Preserved
	A0.0	(A0StP)	Stack pointer		Preserved
	A1.0	(A0GbP)				Preserved
	A0.1	(A0FrP)	Frame pointer		Preserved
	A1.1	(A0LbP)				Preserved
	A{0-1},{2-3}				Clobbered

64-bit arguments are placed in matching pairs of registers (i.e. the same
register number in both D0 and D1 units), with the least significant half in D0
and the most significant half in D1, leaving a gap where necessary. Further
arguments are stored on the stack in reverse order (earlier arguments at higher
addresses):

	ADDRESS		0     1     2     3	4     5     6     7
	===============	===== ===== ===== =====	===== ===== ===== =====
	A0StP       -->
	A0StP-0x08	32bit argument #8	32bit argument #7
	A0StP-0x10	32bit argument #10	32bit argument #9

Function prologues tend to look a bit like this:

	/* If frame pointer in use, move it to frame temp register so it can be
	   easily pushed onto stack */
	MOV	D0FrT,A0FrP

	/* If frame pointer in use, set it to stack pointer */
	ADD	A0FrP,A0StP,#0

	/* Preserve D0FrT, D1RtP, D{0-1}.{5-7} on stack, incrementing A0StP */
	MSETL	[A0StP++],D0FrT,D0.5,D0.6,D0.7

	/* Allocate some stack space for local variables */
	ADD	A0StP,A0StP,#0x10

At this point the stack would look like this:

	ADDRESS		0     1     2     3	4     5     6     7
	===============	===== ===== ===== =====	===== ===== ===== =====
	A0StP       -->
	A0StP-0x08
	A0StP-0x10
	A0StP-0x18	Old D0.7		Old D1.7
	A0StP-0x20	Old D0.6		Old D1.6
	A0StP-0x28	Old D0.5		Old D1.5
	A0FrP       -->	Old A0FrP (frame ptr)	Old D1RtP (return ptr)
	A0FrP-0x08	32bit argument #8	32bit argument #7
	A0FrP-0x10	32bit argument #10	32bit argument #9

Function epilogues tend to differ depending on the use of a frame pointer. An
example of a frame pointer epilogue:

	/* Restore D0FrT, D1RtP, D{0-1}.{5-7} from stack, incrementing A0FrP */
	MGETL	D0FrT,D0.5,D0.6,D0.7,[A0FrP++]
	/* Restore stack pointer to where frame pointer was before increment */
	SUB	A0StP,A0FrP,#0x20
	/* Restore frame pointer from frame temp */
	MOV	A0FrP,D0FrT
	/* Return to caller via restored return pointer */
	MOV	PC,D1RtP

If the function hasn't touched the frame pointer, MGETL cannot be safely used
with A0StP as it always increments and that would expose the stack to clobbering
by interrupts (kernel) or signals (user). Therefore it's common to see the MGETL
split into separate GETL instructions:

	/* Restore D0FrT, D1RtP, D{0-1}.{5-7} from stack */
	GETL	D0FrT,D1RtP,[A0StP+#-0x30]
	GETL	D0.5,D1.5,[A0StP+#-0x28]
	GETL	D0.6,D1.6,[A0StP+#-0x20]
	GETL	D0.7,D1.7,[A0StP+#-0x18]
	/* Restore stack pointer */
	SUB	A0StP,A0StP,#0x30
	/* Return to caller via restored return pointer */
	MOV	PC,D1RtP
