projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Refactoring
[ghc-hetmet.git]
/
rts
/
PrimOps.cmm
diff --git
a/rts/PrimOps.cmm
b/rts/PrimOps.cmm
index
7c75fca
..
f3f23d6
100644
(file)
--- a/
rts/PrimOps.cmm
+++ b/
rts/PrimOps.cmm
@@
-27,6
+27,28
@@
#include "Cmm.h"
#include "Cmm.h"
+#ifdef __PIC__
+import __gmpz_init;
+import __gmpz_add;
+import __gmpz_sub;
+import __gmpz_mul;
+import __gmpz_gcd;
+import __gmpn_gcd_1;
+import __gmpn_cmp;
+import __gmpz_tdiv_q;
+import __gmpz_tdiv_r;
+import __gmpz_tdiv_qr;
+import __gmpz_fdiv_qr;
+import __gmpz_divexact;
+import __gmpz_and;
+import __gmpz_xor;
+import __gmpz_ior;
+import __gmpz_com;
+import base_GHCziIOBase_NestedAtomically_closure;
+import pthread_mutex_lock;
+import pthread_mutex_unlock;
+#endif
+
/*-----------------------------------------------------------------------------
Array Primitives
/*-----------------------------------------------------------------------------
Array Primitives
@@
-1869,7
+1891,7
@@
unpackClosurezh_fast
// TODO: Consider the absence of ptrs or nonptrs as a special case ?
W_ info, ptrs, nptrs, p, ptrs_arr, nptrs_arr;
// TODO: Consider the absence of ptrs or nonptrs as a special case ?
W_ info, ptrs, nptrs, p, ptrs_arr, nptrs_arr;
- info = %GET_STD_INFO(R1);
+ info = %GET_STD_INFO(UNTAG(R1));
// Some closures have non-standard layout, so we omit those here.
W_ type;
// Some closures have non-standard layout, so we omit those here.
W_ type;
@@
-1899,6
+1921,9
@@
out:
ALLOC_PRIM (ptrs_arr_sz + nptrs_arr_sz, R1_PTR, unpackClosurezh_fast);
ALLOC_PRIM (ptrs_arr_sz + nptrs_arr_sz, R1_PTR, unpackClosurezh_fast);
+ W_ clos;
+ clos = UNTAG(R1);
+
ptrs_arr = Hp - nptrs_arr_sz - ptrs_arr_sz + WDS(1);
nptrs_arr = Hp - nptrs_arr_sz + WDS(1);
ptrs_arr = Hp - nptrs_arr_sz - ptrs_arr_sz + WDS(1);
nptrs_arr = Hp - nptrs_arr_sz + WDS(1);
@@
-1907,7
+1932,7
@@
out:
p = 0;
for:
if(p < ptrs) {
p = 0;
for:
if(p < ptrs) {
- W_[ptrs_arr + SIZEOF_StgMutArrPtrs + WDS(p)] = StgClosure_payload(R1,p);
+ W_[ptrs_arr + SIZEOF_StgMutArrPtrs + WDS(p)] = StgClosure_payload(clos,p);
p = p + 1;
goto for;
}
p = p + 1;
goto for;
}
@@
-1917,7
+1942,7
@@
for:
p = 0;
for2:
if(p < nptrs) {
p = 0;
for2:
if(p < nptrs) {
- W_[BYTE_ARR_CTS(nptrs_arr) + WDS(p)] = StgClosure_payload(R1, p+ptrs);
+ W_[BYTE_ARR_CTS(nptrs_arr) + WDS(p)] = StgClosure_payload(clos, p+ptrs);
p = p + 1;
goto for2;
}
p = p + 1;
goto for2;
}
@@
-1944,7
+1969,7
@@
waitReadzh_fast
{
/* args: R1 */
#ifdef THREADED_RTS
{
/* args: R1 */
#ifdef THREADED_RTS
- foreign "C" barf("waitRead# on threaded RTS");
+ foreign "C" barf("waitRead# on threaded RTS") never returns;
#else
ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
#else
ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
@@
-1961,7
+1986,7
@@
waitWritezh_fast
{
/* args: R1 */
#ifdef THREADED_RTS
{
/* args: R1 */
#ifdef THREADED_RTS
- foreign "C" barf("waitWrite# on threaded RTS");
+ foreign "C" barf("waitWrite# on threaded RTS") never returns;
#else
ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
#else
ASSERT(StgTSO_why_blocked(CurrentTSO) == NotBlocked::I16);
@@
-1986,7
+2011,7
@@
delayzh_fast
#endif
#ifdef THREADED_RTS
#endif
#ifdef THREADED_RTS
- foreign "C" barf("delay# on threaded RTS");
+ foreign "C" barf("delay# on threaded RTS") never returns;
#else
/* args: R1 (microsecond delay amount) */
#else
/* args: R1 (microsecond delay amount) */
@@
-2052,7
+2077,7
@@
asyncReadzh_fast
CInt reqID;
#ifdef THREADED_RTS
CInt reqID;
#ifdef THREADED_RTS
- foreign "C" barf("asyncRead# on threaded RTS");
+ foreign "C" barf("asyncRead# on threaded RTS") never returns;
#else
/* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
#else
/* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
@@
-2080,7
+2105,7
@@
asyncWritezh_fast
CInt reqID;
#ifdef THREADED_RTS
CInt reqID;
#ifdef THREADED_RTS
- foreign "C" barf("asyncWrite# on threaded RTS");
+ foreign "C" barf("asyncWrite# on threaded RTS") never returns;
#else
/* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
#else
/* args: R1 = fd, R2 = isSock, R3 = len, R4 = buf */
@@
-2108,7
+2133,7
@@
asyncDoProczh_fast
CInt reqID;
#ifdef THREADED_RTS
CInt reqID;
#ifdef THREADED_RTS
- foreign "C" barf("asyncDoProc# on threaded RTS");
+ foreign "C" barf("asyncDoProc# on threaded RTS") never returns;
#else
/* args: R1 = proc, R2 = param */
#else
/* args: R1 = proc, R2 = param */