fif.s 929 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. .global fif8, Fd0, Fd1, Fd80000000, Fs80000000, Fs0
  2. .align 8
  3. Fd0:
  4. .double 0r0
  5. Fd1:
  6. .double 0r1
  7. FxE15:
  8. .word 0x43300000, 0x0 ! magic const: (a.b + x) - x == a.0
  9. Fd80000000:
  10. .align 8
  11. .double 0r4294967296
  12. Fs80000000:
  13. .single 0r4294967296
  14. Fs0:
  15. .single 0r0
  16. fif8:
  17. ld [%l0], %f0
  18. ld [%l0+4], %f1
  19. ld [%l0+8], %f2
  20. ld [%l0+12], %f3
  21. fmuld %f0, %f2, %f0
  22. fmovs %f0, %f6
  23. fmovs %f1, %f7
  24. set Fd0, %o0
  25. ldd [%o0], %f8
  26. fcmpd %f0, %f8
  27. nop
  28. fbuge,a 1f
  29. mov %g0, %o1
  30. set 1, %o1
  31. fnegs %f0, %f0
  32. 1:
  33. set FxE15, %o0
  34. ldd [%o0], %f10
  35. fcmpd %f0, %f10
  36. nop
  37. fbuge 2f
  38. nop
  39. faddd %f0, %f10, %f4
  40. fsubd %f4, %f10, %f4
  41. fsubd %f0, %f4, %f2
  42. set Fd1, %o0
  43. ldd [%o0], %f12
  44. 4: fcmpd %f2, %f12
  45. nop
  46. fbge,a 4b
  47. fsubd %f2, %f12, %f2
  48. 5: fcmpd %f2, %f8
  49. nop
  50. fbl,a 5b
  51. faddd %f2, %f12, %f2
  52. fsubd %f0, %f2, %f0
  53. 2:
  54. tst %o1
  55. bz 3f
  56. nop
  57. fnegs %f0, %f0
  58. 3:
  59. fsubd %f6, %f0, %f2
  60. st %f0, [%l0]
  61. st %f1, [%l0+4]
  62. st %f2, [%l0+8]
  63. st %f3, [%l0+12]
  64. retl
  65. nop