system.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef __ASM_CRIS_ARCH_SYSTEM_H
  2. #define __ASM_CRIS_ARCH_SYSTEM_H
  3. /* read the CPU version register */
  4. static inline unsigned long rdvr(void) {
  5. unsigned char vr;
  6. __asm__ volatile ("move $vr,%0" : "=rm" (vr));
  7. return vr;
  8. }
  9. #define cris_machine_name "cris"
  10. /* read/write the user-mode stackpointer */
  11. static inline unsigned long rdusp(void) {
  12. unsigned long usp;
  13. __asm__ __volatile__("move $usp,%0" : "=rm" (usp));
  14. return usp;
  15. }
  16. #define wrusp(usp) \
  17. __asm__ __volatile__("move %0,$usp" : /* no outputs */ : "rm" (usp))
  18. /* read the current stackpointer */
  19. static inline unsigned long rdsp(void) {
  20. unsigned long sp;
  21. __asm__ __volatile__("move.d $sp,%0" : "=rm" (sp));
  22. return sp;
  23. }
  24. static inline unsigned long _get_base(char * addr)
  25. {
  26. return 0;
  27. }
  28. #define nop() __asm__ __volatile__ ("nop");
  29. #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
  30. #define tas(ptr) (xchg((ptr),1))
  31. struct __xchg_dummy { unsigned long a[100]; };
  32. #define __xg(x) ((struct __xchg_dummy *)(x))
  33. #endif