/* clobbers r10, r11 registers pair */
.macro DSP_SAVE_REGFILE_IRQ #ifdefined(CONFIG_ARC_DSP_KERNEL) /* * Drop any changes to DSP_CTRL made by userspace so userspace won't be * able to break kernel - reset it to DSP_CTRL_DISABLED_ALL value
*/
mov r10, DSP_CTRL_DISABLED_ALL
sr r10, [ARC_AUX_DSP_CTRL]
#elifdefined(CONFIG_ARC_DSP_SAVE_RESTORE_REGS) /* * Save DSP_CTRL register and reset it to value suitable for kernel * (DSP_CTRL_DISABLED_ALL)
*/
mov r10, DSP_CTRL_DISABLED_ALL
aex r10, [ARC_AUX_DSP_CTRL]
st r10, [sp, PT_DSP_CTRL]
/* * As we save new and restore old AUX register value in the same place we * can optimize a bit and use AEX instruction (swap contents of an auxiliary * register with a core register) instead of LR + SR pair.
*/ #define AUX_SAVE_RESTORE(_saveto, _readfrom, _offt, _aux) \ do { \ longunsignedint _scratch; \
\
__asm__ __volatile__( \ "ld %0, [%2, %4] \n" \ "aex %0, [%3] \n" \ "st %0, [%1, %4] \n" \
: \ "=&r" (_scratch) /* must be early clobber */ \
: \ "r" (_saveto), \ "r" (_readfrom), \ "Ir" (_aux), \ "Ir" (_offt) \
: \ "memory" \
); \
} while (0)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.