| >   * There is provision in C-- for primops that (a) may have more
| > than one result, (b) have effects.  This is done by the %% syntax,
| > described at the end of Section 6.3 of the C-- spec.
| >   * However this feature is ill-specified by the C-- spec; indeed
| > no %% operators are described at all
|
| I did not understand that reference when I read it the first time.
| Section 6.8.1 mentions 'foreign "C--"', which until now did not make
| sense to me.  Now I realise that C-- has a basic runtime system so
| primitive operators must leave the runtime system in order to produce
| side effects.  Interesting workaround--reminiscent of mutable
| variables in Haskell.  The big question is whether all those extra
| foreign calls may be reduced to the proper assembler mnemonics
| instead of creating special procedures.

Now you've confused me! The form
        x = %%op( p, q, r )
has the *form* of a call, and it *may* generate a call, but it also fine for 
the C-- compiler to generate a single, inline machine instruction.  Indeed that 
is what GHC does for the memory-barrier op, I think.

I don't understand  your reference to the C-- runtime; it doesn't seem relevant 
here.

Simon

_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to