fixed SP restoration.
[bugg-scheme-compiler.git] / src / c / arch.h
blob59e83c6ce5421e2fc433db8f0ab35dc2cb314ce2
1 /* Architecture */
3 #ifndef __ARCH_H
4 #define __ARCH_H
6 void initArchitecture(int stackSize, int regsCount);
8 /* Stack */
9 extern int* stack;
10 extern int sp;
11 extern int fp;
13 void push(int x);
14 int pop();
16 /* The stack when in a user procedure:
17 fp -> | |
18 | fp | - the old fp (before this application)
19 | ret | - return address
20 | env | - points to the enviroment vector
21 | n | - number of arguments
22 | A0 | - argument 0
23 | A1 | - argument 1
24 | ... | - ...
25 | An-1 | - argument n-1
27 Note: sp does NOT have to be equal to fp - for example if we are in the
28 middle of applying a procedure and already pushed some arguments
29 on to the stack (then sp has changed, but fp has not).
31 Macros for user procedures:
33 #define ST_ARG(n) (stack[fp-5-(n)])
34 #define ST_ARG_COUNT() (stack[fp-4])
35 #define ST_OLDFP() (stack[fp-1])
36 #define ST_RET() (stack[fp-2])
37 #define ST_ENV() (stack[fp-3])
38 #define RETURN() goto *pop()
40 /* General Purpose Registers */
41 extern int* r;
42 extern int r_res;
44 #endif