summaryrefslogtreecommitdiff
path: root/includes/Cmm.h
diff options
context:
space:
mode:
authorGeoffrey Mainland <gmainlan@microsoft.com>2012-10-05 15:19:55 +0100
committerGeoffrey Mainland <gmainlan@microsoft.com>2012-10-30 20:50:48 +0000
commite2f6bbd3a27685bc667655fdb093734cb565b4cf (patch)
tree7b111be1d9e14a61073d3ca30c1d7333d494d127 /includes/Cmm.h
parent5ee08ddffbbe596d7716a09306888004e6baf2b1 (diff)
downloadhaskell-e2f6bbd3a27685bc667655fdb093734cb565b4cf.tar.gz
Draw STG F and D registers from the same pool of available SSE registers on x86-64.
On x86-64 F and D registers are both drawn from SSE registers, so there is no reason not to draw them from the same pool of available SSE registers. This means that whereas previously a function could only receive two Double arguments in registers even if it did not have any Float arguments, now it can receive up to 6 arguments that are any mix of Float and Double in registers. This patch breaks the LLVM back end. The next patch will fix this breakage.
Diffstat (limited to 'includes/Cmm.h')
-rw-r--r--includes/Cmm.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/includes/Cmm.h b/includes/Cmm.h
index 36aae9b8dc..211d2a86fe 100644
--- a/includes/Cmm.h
+++ b/includes/Cmm.h
@@ -682,8 +682,8 @@
#define SAVE_STGREGS \
W_ r1, r2, r3, r4, r5, r6, r7, r8; \
- F_ f1, f2, f3, f4; \
- D_ d1, d2; \
+ F_ f1, f2, f3, f4, f5, f6; \
+ D_ d1, d2, d3, d4, d5, d6; \
L_ l1; \
\
r1 = R1; \
@@ -699,9 +699,15 @@
f2 = F2; \
f3 = F3; \
f4 = F4; \
+ f5 = F5; \
+ f6 = F6; \
\
d1 = D1; \
d2 = D2; \
+ d3 = D3; \
+ d4 = D4; \
+ d5 = D5; \
+ d6 = D6; \
\
l1 = L1;
@@ -720,9 +726,15 @@
F2 = f2; \
F3 = f3; \
F4 = f4; \
+ F5 = f5; \
+ F6 = f6; \
\
D1 = d1; \
D2 = d2; \
+ D3 = d3; \
+ D4 = d4; \
+ D5 = d5; \
+ D6 = d6; \
\
L1 = l1;