Browse Source

Access Q-bitn from c

You mentioned in synth_dc.h "// if only C language provided a way to test Q status bit...."
Here it is :) . That return (out & 0x8000000)>>27; translates to only one more instruction : ubfx    r0, r0, #27, #1 , i decided to use the c -variant because it is better to readable.

I added a function to clear that bit ( clr_q_psr() ), too. Unfortunately, three instructions are needed (read-modify-write)
dds
Frank 8 years ago
parent
commit
cd9eb4b218
1 changed files with 17 additions and 0 deletions
  1. +17
    -0
      utility/dspinst.h

+ 17
- 0
utility/dspinst.h View File

return out; return out;
} }


//get Q from PSR
static inline uint32_t get_q_psr(void) __attribute__((always_inline, unused));
static inline uint32_t get_q_psr(void)
{
uint32_t out;
asm volatile("mrs %0, APSR" : "=r" (out));
return (out & 0x8000000)>>27;
}


//clear Q BIT in PSR
static inline void clr_q_psr(void) __attribute__((always_inline, unused));
static inline void clr_q_psr(void)
{
uint32_t t;
asm volatile("mrs %0,APSR " : "=r" (t));
asm volatile("bfc %0, #27, #1" : "=r" (t));
asm volatile("msr APSR_nzcvq,%0" : "=r" (t));
}


#endif #endif

Loading…
Cancel
Save