Guest User

Untitled

a guest
Jul 26th, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.28 KB | None | 0 0
  1. diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md
  2. index 654d9d5..3bfd821 100644
  3. --- a/gcc/config/arm/neon.md
  4. +++ b/gcc/config/arm/neon.md
  5. @@ -548,6 +548,32 @@
  6.                      (const_string "neon_mul_<V_elem_ch><q>")))]
  7.  )
  8.  
  9. +(define_expand "div<mode>3"
  10. +  [(set (match_operand:VCVTF 0 "s_register_operand" "=w")
  11. +        (div:VCVTF (match_operand:VCVTF 1 "s_register_operand" "w")
  12. +         (match_operand:VCVTF 2 "s_register_operand" "w")))]
  13. +  "TARGET_NEON && flag_unsafe_math_optimizations"
  14. +  {
  15. +    rtx rec = gen_reg_rtx (<MODE>mode);
  16. +    rtx vrecps_temp = gen_reg_rtx (<MODE>mode);
  17. +
  18. +    /* Reciprocal estimate */
  19. +    emit_insn (gen_neon_vrecpe<mode> (rec, operands[2]));
  20. +
  21. +    /* Perform 2 iterations of newton-raphson method */
  22. +    for (int i = 0; i < 2; i++)
  23. +      {
  24. +   emit_insn (gen_neon_vrecps<mode> (vrecps_temp, rec, operands[2]));
  25. +   emit_insn (gen_mul<mode>3 (rec, rec, vrecps_temp));
  26. +      }
  27. +
  28. +    /* We now have reciprocal in rec, perform operands[0] = operands[1] * rec */
  29. +    emit_insn (gen_mul<mode>3 (operands[0], operands[1], rec));
  30. +    DONE;
  31. +  }
  32. +)
  33. +
  34. +
  35.  (define_insn "mul<mode>3add<mode>_neon"
  36.    [(set (match_operand:VDQW 0 "s_register_operand" "=w")
  37.          (plus:VDQW (mult:VDQW (match_operand:VDQW 2 "s_register_operand" "w")
Advertisement
Add Comment
Please, Sign In to add comment