предполагается, что функция
void foo(uint8_t value)
{
somearray[some_idx] = value;
}
CodeVision производит следующее
ST -Y,R26 // the parameter "value" is in R26
; value -> Y+0
LDS R30,_some_idx
LDI R31,0
SUBI R30,LOW(-_somearray)
SBCI R31,HIGH(-_somearray)
LD R26,Y
STD Z+0,R26
Хранение и загрузка R26 в и из Y совершенно не нужны и занимают 2 + 2 цикла ни за что.Я просто хочу понять, почему CodeVision делает это, так как обычно он очень умный.