
Hello, According to Note [Syntax of .cmm files], | There are two ways to write .cmm code: | | (1) High-level Cmm code delegates the stack handling to GHC, and | never explicitly mentions Sp or registers. | | (2) Low-level Cmm manages the stack itself, and must know about | calling conventions. | | Whether you want high-level or low-level Cmm is indicated by the | presence of an argument list on a procedure. However, while working on integer-gmp I've been noticing in integer-gmp/cbits/gmp-wrappers.cmm that even though all Cmm procedures have been converted to high-level Cmm, they still reference the 'Sp' register, e.g. #define GMP_TAKE1_RET1(name,mp_fun) \ name (W_ ws1, P_ d1) \ { \ W_ mp_tmp1; \ W_ mp_result1; \ \ again: \ STK_CHK_GEN_N (2 * SIZEOF_MP_INT); \ MAYBE_GC(again); \ \ mp_tmp1 = Sp - 1 * SIZEOF_MP_INT; \ mp_result1 = Sp - 2 * SIZEOF_MP_INT; \ ... \ So is this valid high-level Cmm code? What's the proper way to allocate Stack (and/or Heap) memory from high-level Cmm code? Cheers, hvr