sha512_asm.S 2.0 KB

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