riscv_hardfp.S 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. *
  4. * Copyright (c) 2019 Western Digital Corporation or its affiliates.
  5. *
  6. * Authors:
  7. * Anup Patel <anup.patel@wdc.com>
  8. */
  9. #ifdef __riscv_flen
  10. #if __riscv_flen != 64
  11. # error single-float only is not supported
  12. #endif
  13. #define get_f32(which) fmv.x.s a0, which; jr t0
  14. #define put_f32(which) fmv.s.x which, a0; jr t0
  15. #if __riscv_xlen == 64
  16. # define get_f64(which) fmv.x.d a0, which; jr t0
  17. # define put_f64(which) fmv.d.x which, a0; jr t0
  18. #else
  19. # define get_f64(which) fsd which, 0(a0); jr t0
  20. # define put_f64(which) fld which, 0(a0); jr t0
  21. #endif
  22. .text
  23. .option norvc
  24. .globl get_f32_reg
  25. get_f32_reg:
  26. get_f32(f0)
  27. get_f32(f1)
  28. get_f32(f2)
  29. get_f32(f3)
  30. get_f32(f4)
  31. get_f32(f5)
  32. get_f32(f6)
  33. get_f32(f7)
  34. get_f32(f8)
  35. get_f32(f9)
  36. get_f32(f10)
  37. get_f32(f11)
  38. get_f32(f12)
  39. get_f32(f13)
  40. get_f32(f14)
  41. get_f32(f15)
  42. get_f32(f16)
  43. get_f32(f17)
  44. get_f32(f18)
  45. get_f32(f19)
  46. get_f32(f20)
  47. get_f32(f21)
  48. get_f32(f22)
  49. get_f32(f23)
  50. get_f32(f24)
  51. get_f32(f25)
  52. get_f32(f26)
  53. get_f32(f27)
  54. get_f32(f28)
  55. get_f32(f29)
  56. get_f32(f30)
  57. get_f32(f31)
  58. .text
  59. .globl put_f32_reg
  60. put_f32_reg:
  61. put_f32(f0)
  62. put_f32(f1)
  63. put_f32(f2)
  64. put_f32(f3)
  65. put_f32(f4)
  66. put_f32(f5)
  67. put_f32(f6)
  68. put_f32(f7)
  69. put_f32(f8)
  70. put_f32(f9)
  71. put_f32(f10)
  72. put_f32(f11)
  73. put_f32(f12)
  74. put_f32(f13)
  75. put_f32(f14)
  76. put_f32(f15)
  77. put_f32(f16)
  78. put_f32(f17)
  79. put_f32(f18)
  80. put_f32(f19)
  81. put_f32(f20)
  82. put_f32(f21)
  83. put_f32(f22)
  84. put_f32(f23)
  85. put_f32(f24)
  86. put_f32(f25)
  87. put_f32(f26)
  88. put_f32(f27)
  89. put_f32(f28)
  90. put_f32(f29)
  91. put_f32(f30)
  92. put_f32(f31)
  93. .text
  94. .globl get_f64_reg
  95. get_f64_reg:
  96. get_f64(f0)
  97. get_f64(f1)
  98. get_f64(f2)
  99. get_f64(f3)
  100. get_f64(f4)
  101. get_f64(f5)
  102. get_f64(f6)
  103. get_f64(f7)
  104. get_f64(f8)
  105. get_f64(f9)
  106. get_f64(f10)
  107. get_f64(f11)
  108. get_f64(f12)
  109. get_f64(f13)
  110. get_f64(f14)
  111. get_f64(f15)
  112. get_f64(f16)
  113. get_f64(f17)
  114. get_f64(f18)
  115. get_f64(f19)
  116. get_f64(f20)
  117. get_f64(f21)
  118. get_f64(f22)
  119. get_f64(f23)
  120. get_f64(f24)
  121. get_f64(f25)
  122. get_f64(f26)
  123. get_f64(f27)
  124. get_f64(f28)
  125. get_f64(f29)
  126. get_f64(f30)
  127. get_f64(f31)
  128. .text
  129. .globl put_f64_reg
  130. put_f64_reg:
  131. put_f64(f0)
  132. put_f64(f1)
  133. put_f64(f2)
  134. put_f64(f3)
  135. put_f64(f4)
  136. put_f64(f5)
  137. put_f64(f6)
  138. put_f64(f7)
  139. put_f64(f8)
  140. put_f64(f9)
  141. put_f64(f10)
  142. put_f64(f11)
  143. put_f64(f12)
  144. put_f64(f13)
  145. put_f64(f14)
  146. put_f64(f15)
  147. put_f64(f16)
  148. put_f64(f17)
  149. put_f64(f18)
  150. put_f64(f19)
  151. put_f64(f20)
  152. put_f64(f21)
  153. put_f64(f22)
  154. put_f64(f23)
  155. put_f64(f24)
  156. put_f64(f25)
  157. put_f64(f26)
  158. put_f64(f27)
  159. put_f64(f28)
  160. put_f64(f29)
  161. put_f64(f30)
  162. put_f64(f31)
  163. #endif