md5_asm.S 1.3 KB

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