sha256_asm.S 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <linux/linkage.h>
  3. #include <asm/visasm.h>
  4. #include "opcodes.h"
  5. ENTRY(sha256_sparc64_transform)
  6. /* %o0 = digest, %o1 = data, %o2 = rounds */
  7. VISEntryHalf
  8. ld [%o0 + 0x00], %f0
  9. ld [%o0 + 0x04], %f1
  10. ld [%o0 + 0x08], %f2
  11. ld [%o0 + 0x0c], %f3
  12. ld [%o0 + 0x10], %f4
  13. ld [%o0 + 0x14], %f5
  14. andcc %o1, 0x7, %g0
  15. ld [%o0 + 0x18], %f6
  16. bne,pn %xcc, 10f
  17. ld [%o0 + 0x1c], %f7
  18. 1:
  19. ldd [%o1 + 0x00], %f8
  20. ldd [%o1 + 0x08], %f10
  21. ldd [%o1 + 0x10], %f12
  22. ldd [%o1 + 0x18], %f14
  23. ldd [%o1 + 0x20], %f16
  24. ldd [%o1 + 0x28], %f18
  25. ldd [%o1 + 0x30], %f20
  26. ldd [%o1 + 0x38], %f22
  27. SHA256
  28. subcc %o2, 1, %o2
  29. bne,pt %xcc, 1b
  30. add %o1, 0x40, %o1
  31. 5:
  32. st %f0, [%o0 + 0x00]
  33. st %f1, [%o0 + 0x04]
  34. st %f2, [%o0 + 0x08]
  35. st %f3, [%o0 + 0x0c]
  36. st %f4, [%o0 + 0x10]
  37. st %f5, [%o0 + 0x14]
  38. st %f6, [%o0 + 0x18]
  39. st %f7, [%o0 + 0x1c]
  40. retl
  41. VISExitHalf
  42. 10:
  43. alignaddr %o1, %g0, %o1
  44. ldd [%o1 + 0x00], %f10
  45. 1:
  46. ldd [%o1 + 0x08], %f12
  47. ldd [%o1 + 0x10], %f14
  48. ldd [%o1 + 0x18], %f16
  49. ldd [%o1 + 0x20], %f18
  50. ldd [%o1 + 0x28], %f20
  51. ldd [%o1 + 0x30], %f22
  52. ldd [%o1 + 0x38], %f24
  53. ldd [%o1 + 0x40], %f26
  54. faligndata %f10, %f12, %f8
  55. faligndata %f12, %f14, %f10
  56. faligndata %f14, %f16, %f12
  57. faligndata %f16, %f18, %f14
  58. faligndata %f18, %f20, %f16
  59. faligndata %f20, %f22, %f18
  60. faligndata %f22, %f24, %f20
  61. faligndata %f24, %f26, %f22
  62. SHA256
  63. subcc %o2, 1, %o2
  64. fsrc2 %f26, %f10
  65. bne,pt %xcc, 1b
  66. add %o1, 0x40, %o1
  67. ba,a,pt %xcc, 5b
  68. ENDPROC(sha256_sparc64_transform)