#include <stdio.h>
#include <stdint.h>
#define STATIC_ANALYSIS (1)
int main(void) {
int32_t rate = -252262384;
static int32_t phaseAccumEL = 0;
static int32_t phaseAccumAZ = 0;
static uint32_t el_period_accum = 0;
static uint32_t az_period_accum = 0;
// for (int i = 0; i < 1000; i++)
// {
// int32_t phaseAccumEL += rate;
phaseAccumAZ += rate;
#if STATIC_ANALYSIS
uint32_t phase_accum_az_uint = phaseAccumAZ;
uint32_t accum_az_upper = phase_accum_az_uint >> 25;
if (accum_az_upper > 64)
{
accum_az_upper -= 128;
}
const int32_t adjustAZ = (int8_t)accum_az_upper;
phase_accum_az_uint &= (1 << 25) - 1;
phaseAccumAZ = phase_accum_az_uint;
printf("adjustAZ=%d phaseAccumAZ=%d, accum_az_upper=%d\n", adjustAZ
, phaseAccumAZ
, accum_az_upper
); #else
int adjustAZ = phaseAccumAZ >> 25;
phaseAccumAZ &= (1 << 25) - 1;
printf("adjustAZ=%d phaseAccumAZ=%d\n", adjustAZ
, phaseAccumAZ
); #endif
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2RlZmluZSBTVEFUSUNfQU5BTFlTSVMgKDEpCgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQzMl90IHJhdGUgPSAtMjUyMjYyMzg0OwogICAgc3RhdGljIGludDMyX3QgcGhhc2VBY2N1bUVMID0gMDsKCXN0YXRpYyBpbnQzMl90IHBoYXNlQWNjdW1BWiA9IDA7CglzdGF0aWMgdWludDMyX3QgZWxfcGVyaW9kX2FjY3VtID0gMDsKCXN0YXRpYyB1aW50MzJfdCBhel9wZXJpb2RfYWNjdW0gPSAwOwogCiAgICAvLyBmb3IgKGludCBpID0gMDsgaSA8IDEwMDA7IGkrKykKICAgIC8vIHsKCSAgICAvLyBpbnQzMl90IHBoYXNlQWNjdW1FTCArPSByYXRlOwoJICAgIHBoYXNlQWNjdW1BWiArPSByYXRlOwojaWYgU1RBVElDX0FOQUxZU0lTCgkgICAgdWludDMyX3QgcGhhc2VfYWNjdW1fYXpfdWludCA9IHBoYXNlQWNjdW1BWjsKCSAgICB1aW50MzJfdCBhY2N1bV9hel91cHBlciA9IHBoYXNlX2FjY3VtX2F6X3VpbnQgPj4gMjU7CgkgICAgaWYgKGFjY3VtX2F6X3VwcGVyID4gNjQpCgkgICAgewoJICAgIAlhY2N1bV9hel91cHBlciAtPSAxMjg7CgkgICAgfQoJICAgIGNvbnN0IGludDMyX3QgYWRqdXN0QVogPSAoaW50OF90KWFjY3VtX2F6X3VwcGVyOwoJICAgIHBoYXNlX2FjY3VtX2F6X3VpbnQgJj0gKDEgPDwgMjUpIC0gMTsKCSAgICBwaGFzZUFjY3VtQVogPSBwaGFzZV9hY2N1bV9hel91aW50OwoJICAgIHByaW50ZigiYWRqdXN0QVo9JWQgcGhhc2VBY2N1bUFaPSVkLCBhY2N1bV9hel91cHBlcj0lZFxuIiwgYWRqdXN0QVosIHBoYXNlQWNjdW1BWiwgYWNjdW1fYXpfdXBwZXIpOwojZWxzZQoJICAgIGludCBhZGp1c3RBWiA9IHBoYXNlQWNjdW1BWiA+PiAyNTsKCSAgICBwaGFzZUFjY3VtQVogJj0gKDEgPDwgMjUpIC0gMTsKCSAgICBwcmludGYoImFkanVzdEFaPSVkIHBoYXNlQWNjdW1BWj0lZFxuIiwgYWRqdXN0QVosIHBoYXNlQWNjdW1BWik7CiNlbmRpZgoJcmV0dXJuIDA7Cn0K