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

Windows CE

开发平台:

C/C++

  1. ;  libFLAC - Free Lossless Audio Codec library
  2. ;  Copyright (C) 2001,2002,2003,2004,2005  Josh Coalson
  3. ;
  4. ;  Redistribution and use in source and binary forms, with or without
  5. ;  modification, are permitted provided that the following conditions
  6. ;  are met:
  7. ;
  8. ;  - Redistributions of source code must retain the above copyright
  9. ;  notice, this list of conditions and the following disclaimer.
  10. ;
  11. ;  - Redistributions in binary form must reproduce the above copyright
  12. ;  notice, this list of conditions and the following disclaimer in the
  13. ;  documentation and/or other materials provided with the distribution.
  14. ;
  15. ;  - Neither the name of the Xiph.org Foundation nor the names of its
  16. ;  contributors may be used to endorse or promote products derived from
  17. ;  this software without specific prior written permission.
  18. ;
  19. ;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. ;  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. ;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. ;  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
  23. ;  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24. ;  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25. ;  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26. ;  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27. ;  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28. ;  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29. ;  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. %include "nasm.h"
  31. data_section
  32. cglobal FLAC__cpu_info_asm_ia32
  33. cglobal FLAC__cpu_info_extended_amd_asm_ia32
  34. cglobal FLAC__cpu_info_sse_test_asm_ia32
  35. code_section
  36. ; **********************************************************************
  37. ;
  38. have_cpuid:
  39. pushfd
  40. pop eax
  41. mov edx, eax
  42. xor eax, 0x00200000
  43. push eax
  44. popfd
  45. pushfd
  46. pop eax
  47. cmp eax, edx
  48. jz .no_cpuid
  49. mov eax, 1
  50. jmp .end
  51. .no_cpuid:
  52. xor eax, eax
  53. .end:
  54. ret
  55. cident FLAC__cpu_info_asm_ia32
  56. push ebx
  57. call have_cpuid
  58. test eax, eax
  59. jz .no_cpuid
  60. mov eax, 1
  61. cpuid
  62. mov eax, edx
  63. jmp .end
  64. .no_cpuid:
  65. xor eax, eax
  66. .end
  67. pop ebx
  68. ret
  69. cident FLAC__cpu_info_extended_amd_asm_ia32
  70. push ebx
  71. call have_cpuid
  72. test eax, eax
  73. jz .no_cpuid
  74. mov eax, 0x80000000
  75. cpuid
  76. cmp eax, 0x80000001
  77. jb .no_cpuid
  78. mov eax, 0x80000001
  79. cpuid
  80. mov eax, edx
  81. jmp .end
  82. .no_cpuid
  83. xor eax, eax
  84. .end
  85. pop ebx
  86. ret
  87. cident FLAC__cpu_info_sse_test_asm_ia32
  88. xorps xmm0, xmm0
  89. pop ebx
  90. end