I manged to solve it using the following:
`FOR_LOOP(0,LAST_IDX,MY_MACRO,GENERATE_COVERPOINT)
`define GENERATE_COVERPOINT(NAME,IDX) `NAME``_``IDX
`define IF_ELSE(COND, THEN, ELSE) `ifdef COND THEN `else ELSE `endif
`define FOR_LOOP(START, END, NAME, BODY) \
`define FOR_LOOP_``END\
`IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , \
`BODY(NAME,START) \
`FOR_LOOP_01(1, END, NAME, BODY) \
) \
`undef FOR_LOOP_``END
`define FOR_LOOP_01(START, END, NAME, BODY) `IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , `BODY(NAME,START) `FOR_LOOP_02(2, END, NAME, BODY))
`define FOR_LOOP_02(START, END, NAME, BODY) `IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , `BODY(NAME,START) `FOR_LOOP_03(3, END, NAME, BODY))
`define FOR_LOOP_03(START, END, NAME, BODY) `IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , `BODY(NAME,START) `FOR_LOOP_04(4, END, NAME, BODY))
`define FOR_LOOP_04(START, END, NAME, BODY) `IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , `BODY(NAME,START) `FOR_LOOP_05(5, END, NAME, BODY))
`define FOR_LOOP_05(START, END, NAME, BODY) `IF_ELSE(FOR_LOOP_``START, `BODY(NAME,START) , `BODY(NAME,START) `FOR_LOOP_06(6, END, NAME, BODY))