0001-sparc64.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. From 1b4af13ff2cc6897557bb0b8d9e2fad4fa4d67aa Mon Sep 17 00:00:00 2001
  2. From: "David S. Miller" <davem@davemloft.net>
  3. Date: Mon, 5 Jun 2017 11:28:57 -0700
  4. Subject: [PATCH] sparc64: Add __multi3 for gcc 7.x and later.
  5. Reported-by: Waldemar Brodkorb <wbx@openadk.org>
  6. Signed-off-by: David S. Miller <davem@davemloft.net>
  7. ---
  8. arch/sparc/lib/Makefile | 1 +
  9. arch/sparc/lib/multi3.S | 35 +++++++++++++++++++++++++++++++++++
  10. 2 files changed, 36 insertions(+)
  11. create mode 100644 arch/sparc/lib/multi3.S
  12. diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
  13. index 69912d2..07c03e7 100644
  14. --- a/arch/sparc/lib/Makefile
  15. +++ b/arch/sparc/lib/Makefile
  16. @@ -15,6 +15,7 @@ lib-$(CONFIG_SPARC32) += copy_user.o locks.o
  17. lib-$(CONFIG_SPARC64) += atomic_64.o
  18. lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o
  19. lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o
  20. +lib-$(CONFIG_SPARC64) += multi3.o
  21. lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o
  22. lib-$(CONFIG_SPARC64) += csum_copy.o csum_copy_from_user.o csum_copy_to_user.o
  23. diff --git a/arch/sparc/lib/multi3.S b/arch/sparc/lib/multi3.S
  24. new file mode 100644
  25. index 0000000..d6b6c97
  26. --- /dev/null
  27. +++ b/arch/sparc/lib/multi3.S
  28. @@ -0,0 +1,35 @@
  29. +#include <linux/linkage.h>
  30. +#include <asm/export.h>
  31. +
  32. + .text
  33. + .align 4
  34. +ENTRY(__multi3) /* %o0 = u, %o1 = v */
  35. + mov %o1, %g1
  36. + srl %o3, 0, %g4
  37. + mulx %g4, %g1, %o1
  38. + srlx %g1, 0x20, %g3
  39. + mulx %g3, %g4, %g5
  40. + sllx %g5, 0x20, %o5
  41. + srl %g1, 0, %g4
  42. + sub %o1, %o5, %o5
  43. + srlx %o5, 0x20, %o5
  44. + addcc %g5, %o5, %g5
  45. + srlx %o3, 0x20, %o5
  46. + mulx %g4, %o5, %g4
  47. + mulx %g3, %o5, %o5
  48. + sethi %hi(0x80000000), %g3
  49. + addcc %g5, %g4, %g5
  50. + srlx %g5, 0x20, %g5
  51. + add %g3, %g3, %g3
  52. + movcc %xcc, %g0, %g3
  53. + addcc %o5, %g5, %o5
  54. + sllx %g4, 0x20, %g4
  55. + add %o1, %g4, %o1
  56. + add %o5, %g3, %g2
  57. + mulx %g1, %o2, %g1
  58. + add %g1, %g2, %g1
  59. + mulx %o0, %o3, %o0
  60. + retl
  61. + add %g1, %o0, %o0
  62. +ENDPROC(__multi3)
  63. +EXPORT_SYMBOL(__multi3)
  64. --
  65. 2.1.2.532.g19b5d50