00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef targ_sim_INCLUDED
00044 #define targ_sim_INCLUDED
00045 #ifdef __cplusplus
00046 extern "C" {
00047 #endif
00048
00049
00050
00051 #define Int_Preg_Min_Offset 1
00052 #define Int_Preg_Max_Offset 16
00053 #define Float_Preg_Min_Offset 17
00054 #define Float_Preg_Max_Offset 32
00055 #define X87_Preg_Min_Offset 33
00056 #define X87_Preg_Max_Offset 40
00057 #define MMX_Preg_Min_Offset 41
00058 #define MMX_Preg_Max_Offset 48
00059 #define Last_Dedicated_Preg_Offset MMX_Preg_Max_Offset
00060
00061
00062 enum { RAX=1, RBX, RBP, RSP, RDI, RSI, RDX, RCX,
00063 R8, R9, R10, R11, R12, R13, R14, R15,
00064 XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
00065 XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15,
00066 ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7,
00067 MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7 };
00068
00069
00070 #define First_Int_Preg_Return_Offset RAX
00071 #define Last_Int_Preg_Return_Offset RDX
00072 #define First_Float_Preg_Return_Offset XMM0
00073 #define Last_Float_Preg_Return_Offset XMM1
00074 #define Stack_Pointer_Preg_Offset RSP
00075 #define Frame_Pointer_Preg_Offset RBP
00076 #define First_Int_Preg_Param_Offset RDI
00077 #define Last_Int_Preg_Param_Offset R9
00078 #define First_Float_Preg_Param_Offset XMM0
00079 #define Last_Float_Preg_Param_Offset XMM7
00080 #define First_X87_Preg_Return_Offset ST0
00081 #define Last_X87_Preg_Return_Offset ST1
00082 #define First_MMX_Preg_Return_Offset MM0
00083 #define Last_MMX_Preg_Return_Offset MM1
00084 #define Static_Link_Preg_Offset ( Is_Target_64bit() ? R10 : RCX )
00085
00086 #define MAX_NUMBER_OF_REGISTERS_FOR_RETURN 2
00087 #define MAX_NUMBER_OF_REGISTER_PARAMETERS 14 // used in data_layout.cxx
00088 #define MAX_NUMBER_OF_INT_REGISTER_PARAMETERS \
00089 ( Is_Target_64bit() ? 6 : 0 ) // used in data_layout.cxx
00090 #define MAX_NUMBER_OF_FLOAT_REGISTER_PARAMETERS \
00091 ( Is_Target_64bit() ? 8 : 0 ) // used in data_layout.cxx
00092
00093 #define PUSH_RETURN_ADDRESS_ON_STACK TRUE
00094 #define PUSH_FRAME_POINTER_ON_STACK TRUE
00095 #define USE_HIGH_LEVEL_PROCEDURE_EXIT TRUE
00096
00097
00098 #include "targ_sim_core.h"
00099
00100
00101 enum X86_64_PARM_CLASS {
00102 X86_64_NO_CLASS,
00103 X86_64_INTEGER_CLASS,
00104 X86_64_SSE_CLASS,
00105 X86_64_MEMORY_CLASS,
00106 X86_64_X87_CLASS,
00107 X86_64_X87UP_CLASS,
00108 X86_64_SSEUP_CLASS,
00109 };
00110
00111 #define MAX_CLASSES 2
00112 extern INT Classify_Aggregate(const TY_IDX ty,
00113 enum X86_64_PARM_CLASS classes[MAX_CLASSES]);
00114
00115 #ifdef __cplusplus
00116 }
00117 #endif
00118
00119 #endif
00120