Target Details
68k binaries
- Register usage:
D0-D2 : return values [scratch] D3 : local scratch (callee save for compatibility) D4-D7 : register-variables [save] A0-A3 : scratch A4 : global pointer A5 : frame pointer A6 : librarybases [scratch] A7 : stack pointer F0 - F7 : floating point scratch F1 - F7 : double parameters
- Internal functions: Thanks to Wouter for letting me use the internal functions of the EC compiler.
PPC binaries
-
A lot of the smaller internal functions are permanently put inline. Inlined functions:
Char()
,Int()
,Long()
,PutChar()
,PutInt()
,PutLong()
,ListItem()
,ListLen()
,EstrLen()
,StrMax()
,ListMax()
,SetStr()
,SetList()
,ObjSize()
,ObjName()
,Shr()
,Shl()
,Not()
,Or()
,Eor()
,And()
,Odd()
,Even()
,Link()
,Next()
,Eval()
,Mul()
,Div()
,Car()
,Cdr()
,Double()
,PutDouble()
,Ptr()
,PutPtr()
,Real()
,PutReal()
,Float()
,PutFloat()
,Word()
,PutWord()
,Byte()
,PutByte()
,Fabs()
-
Functions/procedures takes their arguments in registers (r3..r10).
-
Additional parameters to functions and procedures (>8 params) are passed on the stack. “self” is passed in R12.
-
Register usage is following: (SysV / MorphOS) ``` R0 : scratch R1 : stack pointer R2 : reserved for system R3 - R5 : return-values [scratch] R3 - R10 : parameters to functions and procedures [scratch] R11, R12 : scratch R13 : global environment pointer R14 - R19 : save R20 - R31 : register variables [save]
F0 - F13 : scratch F1 - F8 : floating point parameters to functions and procedures [scratch] F1 - F4 : floating point return values [scratch] F14 - F19 : save F20 - F31 : floating point register variables [save]
V0 - V19 : vector scratch V2 - V13 : vector parameters to functions and procedures [scratch] V2 - V5 : vector return values [scratch] V20 - V31 : vector register variables [save] ```
68k and ppc binaries
String()
, List()
, DisposeLink()
functions now uses a private
exec/memorypool. This makes allocation faster, deallocation and
end_of_program_auto_allocation much faster. You also save 4 bytes for each
string/list. It also means runtime memlist gets less cluttered so Dispose()
function may get much faster too.