Target Details

EEC Documentation


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.