Method Of Using Registers - Epson S5U1C17001C Manual

Cmos 16-bit single chip microcomputer, c compiler package for s1c17 family
Hide thumbs Also See for S5U1C17001C:
Table of Contents

Advertisement

6.4.3 Method of Using registers

The following shows how the xgcc C compiler uses general-purpose registers.
Table 6.4.3.1 Method of using general-purpose registers by xgcc
register
Method of use
%r0
Register for passing argument (1st word)
Register for storing returned values (8/16-bit data, pointer, 16 low-order bits of 32-bit data)
%r1
Register for passing argument (2nd word)
Register for storing returned values (16 high-order bits of 32-bit data)
%r2
Register for passing argument (3rd word)
%r3
Register for passing argument (4th word)
%r4
Registers that need have to their values saved when calling a function
%r5
%r6
%r7
registers for passing arguments (%r0 to %r3)
These registers are used to store arguments when calling a function. Arguments exceeding four words are stored
in the stack before being passed. They are used as scratch registers before storing arguments.
%r0 ← First argument
%r1 ← Second argument
%r2 ← Third argument
%r3 ← Fourth argument
A pair of the registers is used to store a 32-bit (long) argument.
%r1 (high-order 16 bits) and %r0 (low-order 16 bits)
%r3 (high-order 16 bits) and %r2 (low-order 16 bits)
Examples:
• First argument: long, second argument: long
foo( long lData1, long lData2 );
%r0 ← lData1 (low-order 16 bits)
%r1 ← lData1 (high-order 16 bits)
%r2 ← lData2 (low-order 16 bits)
%r3 ← lData2 (high-order 16 bits)
• First argument: short, second argument: long
foo( short sData, long lData );
%r0 ← sData (16 bits)
Unused
%r1
%r2 ← lData (low-order 16 bits)
%r3 ← lData (high-order 16 bits)
• First argument: long, second argument: short, third argument: short
foo( long lData, short sData1, short sData2 );
%r0 ← lData (low-order 16 bits)
%r1 ← lData (high-order 16 bits)
%r2 ← sData1 (16 bits)
%r3 ← sData2 (16 bits)
• First argument: long; second argument: pointer; third argument: pointer
foo( long lData, int *ip_Pt, char *cp_Pt );
%r0 ← lData (lower-order 16 bits)
%r1 ← lData (lower-order 16 bits)
%r2 ← ip_Pt (24 bits (for REGULAR/MIDDLE MODEL), 16 bits (for SMALL MODEL))
%r3 ← cp_Pt (24 bits (for REGULAR/MIDDLE MODEL), 16 bits (for SMALL MODEL))
S5U1C17001C ManUal
(C COMPilEr PaCkagE fOr S1C17 faMily) (Ver. 1.5.0)
EPSOn
6 C COMPilEr
6
Compiler
6-11

Advertisement

Table of Contents
loading

Table of Contents