sha512_asm.S 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <linux/linkage.h>
  3. #include <asm/visasm.h>
  4. #include "opcodes.h"
  5. ENTRY(sha512_sparc64_transform)
  6. /* %o0 = digest, %o1 = data, %o2 = rounds */
  7. VISEntry
  8. ldd [%o0 + 0x00], %f0
  9. ldd [%o0 + 0x08], %f2
  10. ldd [%o0 + 0x10], %f4
  11. ldd [%o0 + 0x18], %f6
  12. ldd [%o0 + 0x20], %f8
  13. ldd [%o0 + 0x28], %f10
  14. andcc %o1, 0x7, %g0
  15. ldd [%o0 + 0x30], %f12
  16. bne,pn %xcc, 10f
  17. ldd [%o0 + 0x38], %f14
  18. 1:
  19. ldd [%o1 + 0x00], %f16
  20. ldd [%o1 + 0x08], %f18
  21. ldd [%o1 + 0x10], %f20
  22. ldd [%o1 + 0x18], %f22
  23. ldd [%o1 + 0x20], %f24
  24. ldd [%o1 + 0x28], %f26
  25. ldd [%o1 + 0x30], %f28
  26. ldd [%o1 + 0x38], %f30
  27. ldd [%o1 + 0x40], %f32
  28. ldd [%o1 + 0x48], %f34
  29. ldd [%o1 + 0x50], %f36
  30. ldd [%o1 + 0x58], %f38
  31. ldd [%o1 + 0x60], %f40
  32. ldd [%o1 + 0x68], %f42
  33. ldd [%o1 + 0x70], %f44
  34. ldd [%o1 + 0x78], %f46
  35. SHA512
  36. subcc %o2, 1, %o2
  37. bne,pt %xcc, 1b
  38. add %o1, 0x80, %o1
  39. 5:
  40. std %f0, [%o0 + 0x00]
  41. std %f2, [%o0 + 0x08]
  42. std %f4, [%o0 + 0x10]
  43. std %f6, [%o0 + 0x18]
  44. std %f8, [%o0 + 0x20]
  45. std %f10, [%o0 + 0x28]
  46. std %f12, [%o0 + 0x30]
  47. std %f14, [%o0 + 0x38]
  48. retl
  49. VISExit
  50. 10:
  51. alignaddr %o1, %g0, %o1
  52. ldd [%o1 + 0x00], %f18
  53. 1:
  54. ldd [%o1 + 0x08], %f20
  55. ldd [%o1 + 0x10], %f22
  56. ldd [%o1 + 0x18], %f24
  57. ldd [%o1 + 0x20], %f26
  58. ldd [%o1 + 0x28], %f28
  59. ldd [%o1 + 0x30], %f30
  60. ldd [%o1 + 0x38], %f32
  61. ldd [%o1 + 0x40], %f34
  62. ldd [%o1 + 0x48], %f36
  63. ldd [%o1 + 0x50], %f38
  64. ldd [%o1 + 0x58], %f40
  65. ldd [%o1 + 0x60], %f42
  66. ldd [%o1 + 0x68], %f44
  67. ldd [%o1 + 0x70], %f46
  68. ldd [%o1 + 0x78], %f48
  69. ldd [%o1 + 0x80], %f50
  70. faligndata %f18, %f20, %f16
  71. faligndata %f20, %f22, %f18
  72. faligndata %f22, %f24, %f20
  73. faligndata %f24, %f26, %f22
  74. faligndata %f26, %f28, %f24
  75. faligndata %f28, %f30, %f26
  76. faligndata %f30, %f32, %f28
  77. faligndata %f32, %f34, %f30
  78. faligndata %f34, %f36, %f32
  79. faligndata %f36, %f38, %f34
  80. faligndata %f38, %f40, %f36
  81. faligndata %f40, %f42, %f38
  82. faligndata %f42, %f44, %f40
  83. faligndata %f44, %f46, %f42
  84. faligndata %f46, %f48, %f44
  85. faligndata %f48, %f50, %f46
  86. SHA512
  87. subcc %o2, 1, %o2
  88. fsrc2 %f50, %f18
  89. bne,pt %xcc, 1b
  90. add %o1, 0x80, %o1
  91. ba,a,pt %xcc, 5b
  92. ENDPROC(sha512_sparc64_transform)