arm.asm
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:

Windows CE

开发平台:

C/C++

  1. ;*****************************************************************************
  2. ;*
  3. ;* This program is free software ; you can redistribute it and/or modify
  4. ;* it under the terms of the GNU General Public License as published by
  5. ;* the Free Software Foundation; either version 2 of the License, or
  6. ;* (at your option) any later version.
  7. ;*
  8. ;* This program is distributed in the hope that it will be useful,
  9. ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. ;* GNU General Public License for more details.
  12. ;*
  13. ;* You should have received a copy of the GNU General Public License
  14. ;* along with this program; if not, write to the Free Software
  15. ;* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16. ;*
  17. ;* $Id: arm.asm 271 2005-08-09 08:31:35Z picard $
  18. ;*
  19. ;* The Core Pocket Media Player
  20. ;* Copyright (c) 2004-2005 Gabor Kovacs
  21. ;*
  22. ;*****************************************************************************
  23. AREA |.text|, CODE
  24. EXPORT GetCpuId
  25. EXPORT GetCPAR
  26. EXPORT CPUSpeedClk
  27. EXPORT CheckARM5E
  28. EXPORT CheckARMXScale
  29. EXPORT IRQDisable
  30. EXPORT IRQEnable
  31. IRQDisable PROC
  32. mrs r0, cpsr
  33. orr r0, r0, #0x80
  34. msr cpsr_c, r0
  35. mov pc,lr
  36. ENDP
  37. IRQEnable PROC
  38. mrs r0, cpsr
  39. bic r0, r0, #0x80
  40. msr cpsr_c, r0
  41. mov pc,lr
  42. ENDP
  43. CheckARM5E PROC
  44. mov r0,#2
  45. qadd r0,r0,r0
  46. qadd r0,r0,r0 
  47. qadd r0,r0,r0
  48. qadd r0,r0,r0
  49. cmp r0,#32
  50. moveq r0,#1
  51. movne r0,#0
  52. mov pc,lr
  53. CheckARMXScale PROC
  54. mov r0,#0x1000000
  55. mov r1,#0x1000000
  56. mar acc0,r0,r1
  57. mov r0,#32
  58. mov r1,#32
  59. mra r0,r1,acc0
  60. cmp r0,#0x1000000
  61. moveq r0,#1
  62. movne r0,#0
  63. cmp r1,#0x1000000 ;64bit or just 40bit?
  64. moveq r0,#2
  65. mov pc,lr
  66. GetCpuId PROC
  67. mrs r0,cpsr
  68. and r0,r0,#15
  69. cmp r0,#15
  70. bne UserMode
  71. mrc p15,0,r0,c0,c0,0
  72. nop
  73. nop
  74. mrc p15,0,r2,c0,c0,1
  75. nop
  76. nop
  77. str r0,[r1,#0]
  78. str r2,[r1,#4]
  79. UserMode
  80. mov pc,lr
  81. ENDP
  82. GetCPAR PROC
  83. mov r0,#0
  84. mrs r1,cpsr
  85. and r1,r1,#15
  86. cmp r1,#15
  87. bne UserMode2
  88. mrc p15,0,r0,c15,c1,0
  89. nop
  90. nop
  91. UserMode2
  92. mov pc,lr
  93. ENDP
  94. MACRO
  95. speed10
  96. add r3,r3,#1
  97. add r3,r3,#1
  98. add r3,r3,#1
  99. add r3,r3,#1
  100. add r3,r3,#1
  101. add r3,r3,#1
  102. add r3,r3,#1
  103. add r3,r3,#1
  104. add r3,r3,#1
  105. add r3,r3,#1
  106. MEND
  107. CPUSpeedClk PROC
  108. mov r2,r0
  109. mov r1,#3+100
  110. mul r0,r2,r1 ;loop overhead
  111. mov r1,#0
  112. CPULoop
  113. speed10
  114. speed10
  115. speed10
  116. speed10
  117. speed10
  118. speed10
  119. speed10
  120. speed10
  121. speed10
  122. speed10
  123. subs r2,r2,#1
  124. bgt CPULoop
  125. mov pc,lr
  126. ENDP
  127. END