I don’t know the answer to this, but Alexis when you find out can I ask (I know 
I'm a broken record on this) that you write a Note to explain, with pointers 
from the various places you looked when you were trying to find out the answer?

Thanks!

Simon

|  -----Original Message-----
|  From: ghc-devs <ghc-devs-boun...@haskell.org> On Behalf Of Alexis King
|  Sent: 14 February 2020 19:53
|  To: ghc-devs <ghc-devs@haskell.org>
|  Subject: Calling an unknown function from low-level Cmm
|  
|  Hi all,
|  
|  I’m trying to understand how to properly call an unknown function from
|  low-level Cmm code. If I’m just applying a function to a state token, it’s
|  easy; I can just do
|  
|      R1 = io;
|      jump stg_ap_v_fast [R1];
|  
|  since the calling convention is consistent in that case. But what if my
|  function takes actual arguments? I can’t do
|  
|      R1 = fun;
|      R2 = arg;
|      jump stg_ap_p_fast [R1, R2];
|  
|  because if the calling convention doesn’t pass any arguments in registers,
|  that would be wrong. I could check if NO_ARG_REGS is defined and generate
|  different code in that situation, but that seems extreme. One option I
|  think would work would be to do
|  
|      R1 = fun;
|      Sp_adj(-2);
|      Sp(1) = arg;
|      jump RET_LBL(stg_ap_p) [R1];
|  
|  but that seems wasteful if I have the argument in a register already
|  anyway. Am I missing something?
|  
|  Thanks,
|  Alexis
|  _______________________________________________
|  ghc-devs mailing list
|  ghc-devs@haskell.org
|  https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.hask
|  ell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
|  devs&amp;data=02%7C01%7Csimonpj%40microsoft.com%7Cbc07f87bae6d4bb96b8d08d7
|  b187813d%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637173067859470793&a
|  mp;sdata=uVYlDXXGfB1vN0MD%2FM%2BBsUflWvrfkYPTEFtVJk2N7Y4%3D&amp;reserved=0
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to