60 lines
No EOL
1.7 KiB
C
60 lines
No EOL
1.7 KiB
C
#ifndef TCC_I386_GEN_H
|
|
# define TCC_I386_GEN_H 1
|
|
|
|
/* number of available registers */
|
|
# define NB_REGS 5
|
|
# define NB_ASM_REGS 8
|
|
|
|
/* a register can belong to several classes. The classes must be
|
|
sorted from more general to more precise (see gv2() code which does
|
|
assumptions on it). */
|
|
# define RC_INT 0x0001 /* generic integer register */
|
|
# define RC_FLOAT 0x0002 /* generic float register */
|
|
# define RC_EAX 0x0004
|
|
# define RC_EDX 0x0008
|
|
# define RC_ECX 0x0010
|
|
# define RC_EBX 0x0020
|
|
# define RC_ST0 0x0040
|
|
|
|
# define RC_IRET RC_EAX /* function return: integer register */
|
|
# define RC_IRE2 RC_EDX /* function return: second integer register */
|
|
# define RC_FRET RC_ST0 /* function return: float register */
|
|
|
|
/* pretty names for the registers */
|
|
enum {
|
|
TREG_EAX = 0,
|
|
TREG_ECX,
|
|
TREG_EDX,
|
|
TREG_EBX,
|
|
TREG_ST0,
|
|
TREG_ESP = 4
|
|
};
|
|
|
|
/* return registers for function */
|
|
# define REG_IRET TREG_EAX /* single word int return register */
|
|
# define REG_IRE2 TREG_EDX /* second word return register (for long long) */
|
|
# define REG_FRET TREG_ST0 /* float return register */
|
|
|
|
/* defined if function parameters must be evaluated in reverse order */
|
|
# define INVERT_FUNC_PARAMS
|
|
|
|
/* defined if structures are passed as pointers. Otherwise structures
|
|
are directly pushed on stack. */
|
|
/* #define FUNC_STRUCT_PARAM_AS_PTR */
|
|
|
|
/* pointer size, in bytes */
|
|
# define PTR_SIZE 4
|
|
|
|
/* long double size and alignment, in bytes */
|
|
# define LDOUBLE_SIZE 12
|
|
# define LDOUBLE_ALIGN 4
|
|
/* maximum alignment (for aligned attribute support) */
|
|
# define MAX_ALIGN 8
|
|
|
|
/* define if return values need to be extended explicitely
|
|
at caller side (for interfacing with non-TCC compilers) */
|
|
# define PROMOTE_RET
|
|
|
|
|
|
|
|
#endif /* !TCC_I386_GEN_H */ |