Translate from AVR pgm_read_byte to normal C array manipulation in STM8
Since pgm_read_byte() as a macro resolves finally in __LPM() is looks like being a function call. Then all its arguments are calculated before the call.

The argument to pgm_read_byte() is a address, so I would try this:

AMP[divider] = *(envs[divider] + (((unsigned char*)&amp;(EPCW[divider]+=EFTW[divider]))[1]));


You could write your own macro:

#define pgm_read_byte(address) ((uint8_t)(*(address)))