summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
Diffstat (limited to 'includes')
-rw-r--r--includes/CodeGen.Platform.hs41
-rw-r--r--includes/stg/MachRegs.h16
-rw-r--r--includes/stg/Regs.h42
-rw-r--r--includes/stg/Types.h2
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.