diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/CodeGen.Platform.hs | 41 | ||||
-rw-r--r-- | includes/stg/MachRegs.h | 16 | ||||
-rw-r--r-- | includes/stg/Regs.h | 42 | ||||
-rw-r--r-- | includes/stg/Types.h | 2 |
4 files changed, 101 insertions, 0 deletions
diff --git a/includes/CodeGen.Platform.hs b/includes/CodeGen.Platform.hs index beff19601d..9be7c054ab 100644 --- a/includes/CodeGen.Platform.hs +++ b/includes/CodeGen.Platform.hs @@ -65,6 +65,23 @@ import Reg # define xmm14 38 # define xmm15 39 +# define ymm0 40 +# define ymm1 41 +# define ymm2 42 +# define ymm3 43 +# define ymm4 44 +# define ymm5 45 +# define ymm6 46 +# define ymm7 47 +# define ymm8 48 +# define ymm9 49 +# define ymm10 50 +# define ymm11 51 +# define ymm12 52 +# define ymm13 53 +# define ymm14 54 +# define ymm15 55 + #elif MACHREGS_powerpc # define r0 0 @@ -391,6 +408,9 @@ activeStgRegs = [ #ifdef REG_XMM1 ,XmmReg 1 #endif +#ifdef REG_YMM1 + ,YmmReg 1 +#endif #ifdef REG_F2 ,FloatReg 2 #endif @@ -400,6 +420,9 @@ activeStgRegs = [ #ifdef REG_XMM2 ,XmmReg 2 #endif +#ifdef REG_YMM2 + ,YmmReg 2 +#endif #ifdef REG_F3 ,FloatReg 3 #endif @@ -409,6 +432,9 @@ activeStgRegs = [ #ifdef REG_XMM3 ,XmmReg 3 #endif +#ifdef REG_YMM3 + ,YmmReg 3 +#endif #ifdef REG_F4 ,FloatReg 4 #endif @@ -418,6 +444,9 @@ activeStgRegs = [ #ifdef REG_XMM4 ,XmmReg 4 #endif +#ifdef REG_YMM4 + ,YmmReg 4 +#endif #ifdef REG_F5 ,FloatReg 5 #endif @@ -427,6 +456,9 @@ activeStgRegs = [ #ifdef REG_XMM5 ,XmmReg 5 #endif +#ifdef REG_YMM5 + ,YmmReg 5 +#endif #ifdef REG_F6 ,FloatReg 6 #endif @@ -436,6 +468,9 @@ activeStgRegs = [ #ifdef REG_XMM6 ,XmmReg 6 #endif +#ifdef REG_YMM6 + ,YmmReg 6 +#endif #else /* MAX_REAL_SSE_REG == 0 */ #ifdef REG_F1 ,FloatReg 1 @@ -594,6 +629,12 @@ globalRegMaybe (XmmReg 3) = Just (RealRegSingle REG_XMM3) globalRegMaybe (XmmReg 4) = Just (RealRegSingle REG_XMM4) globalRegMaybe (XmmReg 5) = Just (RealRegSingle REG_XMM5) globalRegMaybe (XmmReg 6) = Just (RealRegSingle REG_XMM6) +globalRegMaybe (YmmReg 1) = Just (RealRegSingle REG_YMM1) +globalRegMaybe (YmmReg 2) = Just (RealRegSingle REG_YMM2) +globalRegMaybe (YmmReg 3) = Just (RealRegSingle REG_YMM3) +globalRegMaybe (YmmReg 4) = Just (RealRegSingle REG_YMM4) +globalRegMaybe (YmmReg 5) = Just (RealRegSingle REG_YMM5) +globalRegMaybe (YmmReg 6) = Just (RealRegSingle REG_YMM6) # endif # ifdef REG_Sp globalRegMaybe Sp = Just (RealRegSingle REG_Sp) diff --git a/includes/stg/MachRegs.h b/includes/stg/MachRegs.h index 76bdb1fc21..2cce08949d 100644 --- a/includes/stg/MachRegs.h +++ b/includes/stg/MachRegs.h @@ -174,6 +174,13 @@ #define REG_XMM5 xmm5 #define REG_XMM6 xmm6 +#define REG_YMM1 ymm1 +#define REG_YMM2 ymm2 +#define REG_YMM3 ymm3 +#define REG_YMM4 ymm4 +#define REG_YMM5 ymm5 +#define REG_YMM6 ymm6 + #if !defined(mingw32_HOST_OS) #define CALLER_SAVES_R3 #define CALLER_SAVES_R4 @@ -208,6 +215,15 @@ #define CALLER_SAVES_XMM6 #endif +#define CALLER_SAVES_YMM1 +#define CALLER_SAVES_YMM2 +#define CALLER_SAVES_YMM3 +#define CALLER_SAVES_YMM4 +#define CALLER_SAVES_YMM5 +#if !defined(mingw32_HOST_OS) +#define CALLER_SAVES_YMM6 +#endif + #define MAX_REAL_VANILLA_REG 6 #define MAX_REAL_FLOAT_REG 6 #define MAX_REAL_DOUBLE_REG 6 diff --git a/includes/stg/Regs.h b/includes/stg/Regs.h index 10ae2851ac..4b0416358e 100644 --- a/includes/stg/Regs.h +++ b/includes/stg/Regs.h @@ -87,6 +87,12 @@ typedef struct { StgWord128 rXMM4; StgWord128 rXMM5; StgWord128 rXMM6; + StgWord128 rYMM1; + StgWord128 rYMM2; + StgWord128 rYMM3; + StgWord128 rYMM4; + StgWord128 rYMM5; + StgWord128 rYMM6; StgWord64 rL1; StgPtr rSp; StgPtr rSpLim; @@ -312,6 +318,42 @@ GLOBAL_REG_DECL(StgWord128,XMM6,REG_XMM6) #define XMM6 (BaseReg->rXMM6) #endif +#if defined(REG_YMM1) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM1,REG_YMM1) +#else +#define YMM1 (BaseReg->rYMM1) +#endif + +#if defined(REG_YMM2) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM2,REG_YMM2) +#else +#define YMM2 (BaseReg->rYMM2) +#endif + +#if defined(REG_YMM3) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM3,REG_YMM3) +#else +#define YMM3 (BaseReg->rYMM3) +#endif + +#if defined(REG_YMM4) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM4,REG_YMM4) +#else +#define YMM4 (BaseReg->rYMM4) +#endif + +#if defined(REG_YMM5) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM5,REG_YMM5) +#else +#define YMM5 (BaseReg->rYMM5) +#endif + +#if defined(REG_YMM6) && !defined(NO_GLOBAL_REG_DECLS) +GLOBAL_REG_DECL(StgWord256,YMM6,REG_YMM6) +#else +#define YMM6 (BaseReg->rYMM6) +#endif + #if defined(REG_L1) && !defined(NO_GLOBAL_REG_DECLS) GLOBAL_REG_DECL(StgWord64,L1,REG_L1) #else diff --git a/includes/stg/Types.h b/includes/stg/Types.h index ccc06a175b..4e574bb5c6 100644 --- a/includes/stg/Types.h +++ b/includes/stg/Types.h @@ -85,6 +85,8 @@ typedef unsigned long long int StgWord64; typedef struct { StgWord64 h; StgWord64 l; } StgWord128; +typedef struct { StgWord128 h; StgWord128 l; } StgWord256; + /* * Define the standard word size we'll use on this machine: make it * big enough to hold a pointer. |