diff options
Diffstat (limited to 'libraries/base/cbits/StackCloningDecoding.cmm')
| -rw-r--r-- | libraries/base/cbits/StackCloningDecoding.cmm | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libraries/base/cbits/StackCloningDecoding.cmm b/libraries/base/cbits/StackCloningDecoding.cmm new file mode 100644 index 0000000000..17b71dd0f0 --- /dev/null +++ b/libraries/base/cbits/StackCloningDecoding.cmm @@ -0,0 +1,26 @@ +#include "Cmm.h" + +stg_cloneMyStackzh () { + gcptr stgStack; + gcptr clonedStack; + + stgStack = StgTSO_stackobj(CurrentTSO); + StgStack_sp(stgStack) = Sp; + + ("ptr" clonedStack) = ccall cloneStack(MyCapability() "ptr", stgStack "ptr"); + + return (clonedStack); +} + +stg_sendCloneStackMessagezh (gcptr threadId, gcptr mVarStablePtr) { + ccall sendCloneStackMessage(threadId "ptr", mVarStablePtr "ptr"); + + return (); +} + +stg_decodeStackzh (gcptr stgStack) { + gcptr stackEntries; + ("ptr" stackEntries) = ccall decodeClonedStack(MyCapability() "ptr", stgStack "ptr"); + + return (stackEntries); +} |
