asmmacro.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file "COPYING" in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 2003 Ralf Baechle
  7. */
  8. #ifndef _ASM_ASMMACRO_H
  9. #define _ASM_ASMMACRO_H
  10. #include <asm/hazards.h>
  11. #ifdef CONFIG_32BIT
  12. #include <asm/asmmacro-32.h>
  13. #endif
  14. #ifdef CONFIG_64BIT
  15. #include <asm/asmmacro-64.h>
  16. #endif
  17. #ifdef CONFIG_MIPS_MT_SMTC
  18. #include <asm/mipsmtregs.h>
  19. #endif
  20. #ifdef CONFIG_MIPS_MT_SMTC
  21. .macro local_irq_enable reg=t0
  22. mfc0 \reg, CP0_TCSTATUS
  23. ori \reg, \reg, TCSTATUS_IXMT
  24. xori \reg, \reg, TCSTATUS_IXMT
  25. mtc0 \reg, CP0_TCSTATUS
  26. _ehb
  27. .endm
  28. .macro local_irq_disable reg=t0
  29. mfc0 \reg, CP0_TCSTATUS
  30. ori \reg, \reg, TCSTATUS_IXMT
  31. mtc0 \reg, CP0_TCSTATUS
  32. _ehb
  33. .endm
  34. #else
  35. .macro local_irq_enable reg=t0
  36. mfc0 \reg, CP0_STATUS
  37. ori \reg, \reg, 1
  38. mtc0 \reg, CP0_STATUS
  39. irq_enable_hazard
  40. .endm
  41. .macro local_irq_disable reg=t0
  42. mfc0 \reg, CP0_STATUS
  43. ori \reg, \reg, 1
  44. xori \reg, \reg, 1
  45. mtc0 \reg, CP0_STATUS
  46. irq_disable_hazard
  47. .endm
  48. #endif /* CONFIG_MIPS_MT_SMTC */
  49. #ifdef CONFIG_CPU_SB1
  50. .macro fpu_enable_hazard
  51. .set push
  52. .set noreorder
  53. .set mips2
  54. SSNOP
  55. bnezl $0, .+4
  56. SSNOP
  57. .set pop
  58. .endm
  59. #else
  60. .macro fpu_enable_hazard
  61. .endm
  62. #endif
  63. /*
  64. * Temporary until all gas have MT ASE support
  65. */
  66. .macro DMT reg=0
  67. .word (0x41600bc1 | (\reg << 16))
  68. .endm
  69. .macro EMT reg=0
  70. .word (0x41600be1 | (\reg << 16))
  71. .endm
  72. .macro DVPE reg=0
  73. .word (0x41600001 | (\reg << 16))
  74. .endm
  75. .macro EVPE reg=0
  76. .word (0x41600021 | (\reg << 16))
  77. .endm
  78. .macro MFTR rt=0, rd=0, u=0, sel=0
  79. .word (0x41000000 | (\rt << 16) | (\rd << 11) | (\u << 5) | (\sel))
  80. .endm
  81. .macro MTTR rt=0, rd=0, u=0, sel=0
  82. .word (0x41800000 | (\rt << 16) | (\rd << 11) | (\u << 5) | (\sel))
  83. .endm
  84. #endif /* _ASM_ASMMACRO_H */