entry-macros.S 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. ! entry.S macro define
  2. .macro cli
  3. stc sr, r0
  4. or #0xf0, r0
  5. ldc r0, sr
  6. .endm
  7. .macro sti
  8. mov #0xfffffff0, r11
  9. extu.b r11, r11
  10. not r11, r11
  11. stc sr, r10
  12. and r11, r10
  13. #ifdef CONFIG_CPU_HAS_SR_RB
  14. stc k_g_imask, r11
  15. or r11, r10
  16. #endif
  17. ldc r10, sr
  18. .endm
  19. .macro get_current_thread_info, ti, tmp
  20. #ifdef CONFIG_CPU_HAS_SR_RB
  21. stc r7_bank, \ti
  22. #else
  23. mov #((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp
  24. shll8 \tmp
  25. shll2 \tmp
  26. mov r15, \ti
  27. and \tmp, \ti
  28. #endif
  29. .endm
  30. #ifdef CONFIG_TRACE_IRQFLAGS
  31. .macro TRACE_IRQS_ON
  32. mov.l r0, @-r15
  33. mov.l r1, @-r15
  34. mov.l r2, @-r15
  35. mov.l r3, @-r15
  36. mov.l r4, @-r15
  37. mov.l r5, @-r15
  38. mov.l r6, @-r15
  39. mov.l r7, @-r15
  40. mov.l 7834f, r0
  41. jsr @r0
  42. nop
  43. mov.l @r15+, r7
  44. mov.l @r15+, r6
  45. mov.l @r15+, r5
  46. mov.l @r15+, r4
  47. mov.l @r15+, r3
  48. mov.l @r15+, r2
  49. mov.l @r15+, r1
  50. mov.l @r15+, r0
  51. mov.l 7834f, r0
  52. bra 7835f
  53. nop
  54. .balign 4
  55. 7834: .long trace_hardirqs_on
  56. 7835:
  57. .endm
  58. .macro TRACE_IRQS_OFF
  59. mov.l r0, @-r15
  60. mov.l r1, @-r15
  61. mov.l r2, @-r15
  62. mov.l r3, @-r15
  63. mov.l r4, @-r15
  64. mov.l r5, @-r15
  65. mov.l r6, @-r15
  66. mov.l r7, @-r15
  67. mov.l 7834f, r0
  68. jsr @r0
  69. nop
  70. mov.l @r15+, r7
  71. mov.l @r15+, r6
  72. mov.l @r15+, r5
  73. mov.l @r15+, r4
  74. mov.l @r15+, r3
  75. mov.l @r15+, r2
  76. mov.l @r15+, r1
  77. mov.l @r15+, r0
  78. mov.l 7834f, r0
  79. bra 7835f
  80. nop
  81. .balign 4
  82. 7834: .long trace_hardirqs_off
  83. 7835:
  84. .endm
  85. #else
  86. .macro TRACE_IRQS_ON
  87. .endm
  88. .macro TRACE_IRQS_OFF
  89. .endm
  90. #endif
  91. #if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
  92. # define PREF(x) pref @x
  93. #else
  94. # define PREF(x) nop
  95. #endif
  96. /*
  97. * Macro for use within assembly. Because the DWARF unwinder
  98. * needs to use the frame register to unwind the stack, we
  99. * need to setup r14 with the value of the stack pointer as
  100. * the return address is usually on the stack somewhere.
  101. */
  102. .macro setup_frame_reg
  103. #ifdef CONFIG_DWARF_UNWINDER
  104. mov r15, r14
  105. #endif
  106. .endm