Jak jsem si nabehnul aneb double v pacalu na AVR

Jan Waclawek konfera na efton.sk
Úterý Červenec 22 07:57:45 CEST 2014


> Ta celociselna varianta je asi 4060 cyklov, ta s double asi 27000 s
> WinAVR20100110 (t.j. avr-gcc 4.3.3). 

Skusil som aj variantu s nativnym int64_t, a vysla mi na asi 5300 cyklov.

Ale mozno som niekde zbytocnou paranoiou rozsiril nejaku premennu viac, nez
bolo nutne.

wek


uint32_t calcPressure1(uint32_t d1, uint32_t d2, uint16_t c1, uint16_t c2,
uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6)
__attribute__((noinline));
uint32_t calcPressure1(uint32_t d1, uint32_t d2, uint16_t c1, uint16_t c2,
uint16_t c3, uint16_t c4, uint16_t c5, uint16_t c6) {
  int32_t dT;
  int64_t OFF;
  int64_t SENS;
  uint32_t P;

  dT = (int32_t)d2 - ((int32_t)c5 SHL 8);
  OFF = ((uint32_t)c2 SHL 16) + ((int64_t)dT * c4) / (1 SHL 7);
  SENS = ((uint32_t)c1 SHL 15) + ((int64_t)dT * c3) / (1 SHL 8);
  P = (((d1 * SENS) / (1L SHL 21) - OFF) / (1L SHL 15));
  return P;
}



Další informace o konferenci Hw-list