On Nov 22, 2006, at 11:52 AM, Simon Peyton-Jones wrote:
Peter Tanski wrote:
There is no difference: all calls are "foreign" to the caller.
Again I'm confused. The form
x = %%foo( p, q )
in the C-- spec has *nothing* to do with foreign calls. Not a
thing! Nor, does it necessarily have anything to do with *calls*.
It might be implemented by a single inline machine instruction.
I am reading too much into the call syntax (sections 5.4 and 6.8.1)
and the 'foreign "C--"' terminology in the C-- Spec. Thanks for
clarifying :)
This is is where the Cmm implementation details come up: would the
caller state *always* save (conversely, the %%op would generate a
call) when the %%op contains code that might change the control
flow? That would depend on how the control flow might change, as
suggested in section 4.4 of your "C-- Extension..." paper,
"Informing the optimiser." Does this sound correct?
I think I'm misunderstanding your question. Let me try again
I was trying to determine the grounds for when a side-effecting
primop would be inlined and when it would be coded as a separate
procedure.
* The primops in a C-- *expressions* have no side effects, and
it's unspecified what order they are done in.
* A %% op in a C-- *statement* (no more than one in one statement!)
can have side effects. The order in which C-- statements are
executed is completely specified by the control flow.
Got it. Well stated.
Cheers,
Pete
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc