Merge commit '5229c43ccf77bcbffeced01dccb27398d017fa34'
[ghc.git] / libraries / base / cbits / CastFloatWord.cmm
1 #include "Cmm.h"
2 #include "MachDeps.h"
3
4 #if WORD_SIZE_IN_BITS == 64
5 #define DOUBLE_SIZE_WDS   1
6 #else
7 #define DOUBLE_SIZE_WDS   2
8 #endif
9
10 stg_word64ToDoublezh(I64 w)
11 {
12     D_ d;
13     P_ ptr;
14
15     STK_CHK_GEN_N (DOUBLE_SIZE_WDS);
16
17     reserve DOUBLE_SIZE_WDS = ptr {
18         I64[ptr] = w;
19         d = D_[ptr];
20     }
21
22     return (d);
23 }
24
25 stg_doubleToWord64zh(D_ d)
26 {
27     I64 w;
28     P_ ptr;
29
30     STK_CHK_GEN_N (DOUBLE_SIZE_WDS);
31
32     reserve DOUBLE_SIZE_WDS = ptr {
33         D_[ptr] = d;
34         w = I64[ptr];
35     }
36
37     return (w);
38 }
39
40 stg_word32ToFloatzh(W_ w)
41 {
42     F_ f;
43     P_ ptr;
44
45     STK_CHK_GEN_N (1);
46
47     reserve 1 = ptr {
48         I32[ptr] = %lobits32(w);
49         f = F_[ptr];
50     }
51
52     return (f);
53 }
54
55 stg_floatToWord32zh(F_ f)
56 {
57     W_ w;
58     P_ ptr;
59
60     STK_CHK_GEN_N (1);
61
62     reserve 1 = ptr {
63         F_[ptr] = f;
64         w = TO_W_(I32[ptr]);
65     }
66
67     return (w);
68 }
69