#ifndef __ASM_METAG_CORE_REG_H_ #define __ASM_METAG_CORE_REG_H_ #include extern void core_reg_write(int unit, int reg, int thread, unsigned int val); extern unsigned int core_reg_read(int unit, int reg, int thread); /* * These macros allow direct access from C to any register known to the * assembler. Example candidates are TXTACTCYC, TXIDLECYC, and TXPRIVEXT. */ #define __core_reg_get(reg) ({ \ unsigned int __grvalue; \ asm volatile("MOV %0," #reg \ : "=r" (__grvalue)); \ __grvalue; \ }) #define __core_reg_set(reg, value) do { \ unsigned int __srvalue = (value); \ asm volatile("MOV " #reg ",%0" \ : \ : "r" (__srvalue)); \ } while (0) #define __core_reg_swap(reg, value) do { \ unsigned int __srvalue = (value); \ asm volatile("SWAP " #reg ",%0" \ : "+r" (__srvalue)); \ (value) = __srvalue; \ } while (0) #endif