arm64cpuid.S 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "arm_arch.h"
  2. .text
  3. .align 5
  4. .globl __armv7_neon_probe
  5. __armv7_neon_probe:
  6. orr v15.16b, v15.16b, v15.16b
  7. ret
  8. .globl __armv7_tick
  9. __armv7_tick:
  10. #ifdef __APPLE__
  11. mrs x0, CNTPCT_EL0
  12. #else
  13. mrs x0, CNTVCT_EL0
  14. #endif
  15. ret
  16. .globl __armv8_aes_probe
  17. __armv8_aes_probe:
  18. aese v0.16b, v0.16b
  19. ret
  20. .globl __armv8_sha1_probe
  21. __armv8_sha1_probe:
  22. sha1h s0, s0
  23. ret
  24. .globl __armv8_sha256_probe
  25. __armv8_sha256_probe:
  26. sha256su0 v0.4s, v0.4s
  27. ret
  28. .globl __armv8_pmull_probe
  29. __armv8_pmull_probe:
  30. pmull v0.1q, v0.1d, v0.1d
  31. ret
  32. .globl __armv8_sha512_probe
  33. __armv8_sha512_probe:
  34. .long 0xcec08000 // sha512su0 v0.2d,v0.2d
  35. ret
  36. .globl _OPENSSL_cleanse
  37. .align 5
  38. _OPENSSL_cleanse:
  39. cbz x1,Lret // len==0?
  40. cmp x1,#15
  41. b.hi Lot // len>15
  42. nop
  43. Little:
  44. strb wzr,[x0],#1 // store byte-by-byte
  45. subs x1,x1,#1
  46. b.ne Little
  47. Lret: ret
  48. .align 4
  49. Lot: tst x0,#7
  50. b.eq Laligned // inp is aligned
  51. strb wzr,[x0],#1 // store byte-by-byte
  52. sub x1,x1,#1
  53. b Lot
  54. .align 4
  55. Laligned:
  56. str xzr,[x0],#8 // store word-by-word
  57. sub x1,x1,#8
  58. tst x1,#-8
  59. b.ne Laligned // len>=8
  60. cbnz x1,Little // len!=0?
  61. ret
  62. .globl _CRYPTO_memcmp
  63. .align 4
  64. _CRYPTO_memcmp:
  65. eor w3,w3,w3
  66. cbz x2,Lno_data // len==0?
  67. cmp x2,#16
  68. b.ne Loop_cmp
  69. ldp x8,x9,[x0]
  70. ldp x10,x11,[x1]
  71. eor x8,x8,x10
  72. eor x9,x9,x11
  73. orr x8,x8,x9
  74. mov x0,#1
  75. cmp x8,#0
  76. csel x0,xzr,x0,eq
  77. ret
  78. .align 4
  79. Loop_cmp:
  80. ldrb w4,[x0],#1
  81. ldrb w5,[x1],#1
  82. eor w4,w4,w5
  83. orr w3,w3,w4
  84. subs x2,x2,#1
  85. b.ne Loop_cmp
  86. Lno_data:
  87. neg w0,w3
  88. lsr w0,w0,#31
  89. ret