;; IA-64 Machine description template
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
;; Free Software Foundation, Inc.
;; Contributed by James E. Wilson <wilson@cygnus.com> and
;; David Mosberger <davidm@hpl.hp.com>.
(UNSPEC_CHKACLR 45)
(UNSPEC_CHKS 47)
(UNSPEC_FR_RECIP_APPROX_RES 48)
+ (UNSPEC_FR_SQRT_RECIP_APPROX_RES 49)
])
(define_constants
"TARGET_INLINE_INT_DIV"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2)))
+ [(parallel [(set (match_dup 0) (unspec:XF [(const_int 1) (match_dup 2)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 6) (unspec:BI [(match_dup 1) (match_dup 2)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 1))])
"TARGET_INLINE_INT_DIV == INL_MIN_LAT"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2)))
+ [(parallel [(set (match_dup 0) (unspec:XF [(const_int 1) (match_dup 2)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 6) (unspec:BI [(match_dup 1) (match_dup 2)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 1))])
"TARGET_INLINE_INT_DIV == INL_MAX_THR"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2)))
+ [(parallel [(set (match_dup 0) (unspec:XF [(const_int 1) (match_dup 2)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 5) (unspec:BI [(match_dup 1) (match_dup 2)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 1))])
"TARGET_INLINE_FLOAT_DIV == INL_MIN_LAT"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 6) (div:XF (const_int 1) (match_dup 8)))
+ [(parallel [(set (match_dup 6) (unspec:XF [(const_int 1) (match_dup 8)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 5) (unspec:BI [(match_dup 7) (match_dup 8)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 0))])
(define_insn "*sqrt_approx"
[(set (match_operand:XF 0 "fr_register_operand" "=f")
(div:XF (const_int 1)
- (sqrt:XF (match_operand:XF 2 "fr_register_operand" "f"))))
+ (unspec:XF [(match_operand:XF 2 "fr_register_operand" "f")]
+ UNSPEC_FR_SQRT_RECIP_APPROX_RES)))
(set (match_operand:BI 1 "register_operand" "=c")
(unspec:BI [(match_dup 2)] UNSPEC_FR_SQRT_RECIP_APPROX))
(use (match_operand:SI 3 "const_int_operand" "")) ]
;; y0 = 1/sqrt(a) in f7
(parallel [(set (match_dup 7)
(div:XF (const_int 1)
- (sqrt:XF (match_dup 8))))
+ (unspec:XF [(match_dup 8)]
+ UNSPEC_FR_SQRT_RECIP_APPROX_RES)))
(set (match_dup 6)
(unspec:BI [(match_dup 8)]
- UNSPEC_FR_SQRT_RECIP_APPROX))
+ UNSPEC_FR_SQRT_RECIP_APPROX))
(use (const_int 0))])
;; Step 2
;; H0 = 1/2 * y0 in f9
"TARGET_INLINE_FLOAT_DIV == INL_MIN_LAT"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 7) (div:XF (const_int 1) (match_dup 9)))
+ [(parallel [(set (match_dup 7) (unspec:XF [(const_int 1) (match_dup 9)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 6) (unspec:BI [(match_dup 8) (match_dup 9)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 0))])
;; y0 = 1/sqrt(a) in f7
(parallel [(set (match_dup 7)
(div:XF (const_int 1)
- (sqrt:XF (match_dup 8))))
+ (unspec:XF [(match_dup 8)]
+ UNSPEC_FR_SQRT_RECIP_APPROX_RES)))
(set (match_dup 6)
(unspec:BI [(match_dup 8)]
- UNSPEC_FR_SQRT_RECIP_APPROX))
+ UNSPEC_FR_SQRT_RECIP_APPROX))
(use (const_int 0))])
;; Step 2
;; H0 = 1/2 * y0 in f8
"TARGET_INLINE_FLOAT_DIV == INL_MIN_LAT"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2)))
+ [(parallel [(set (match_dup 0) (unspec:XF [(const_int 1) (match_dup 2)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 7) (unspec:BI [(match_dup 1) (match_dup 2)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 0))])
"TARGET_INLINE_FLOAT_DIV == INL_MAX_THR"
"#"
"&& reload_completed"
- [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2)))
+ [(parallel [(set (match_dup 0) (unspec:XF [(const_int 1) (match_dup 2)]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_dup 5) (unspec:BI [(match_dup 1) (match_dup 2)]
UNSPEC_FR_RECIP_APPROX))
(use (const_int 0))])
;; y0 = 1/sqrt(a) in f7
(parallel [(set (match_dup 8)
(div:XF (const_int 1)
- (sqrt:XF (match_dup 9))))
+ (unspec:XF [(match_dup 9)]
+ UNSPEC_FR_SQRT_RECIP_APPROX_RES)))
(set (match_dup 7)
(unspec:BI [(match_dup 9)]
- UNSPEC_FR_SQRT_RECIP_APPROX))
+ UNSPEC_FR_SQRT_RECIP_APPROX))
(use (const_int 0))])
;; Step 2
;; H0 = 1/2 * y0 in f9
(define_insn "*recip_approx"
[(set (match_operand:XF 0 "fr_register_operand" "=f")
- (div:XF (const_int 1)
- (match_operand:XF 3 "fr_register_operand" "f")))
+ (unspec:XF [(const_int 1)
+ (match_operand:XF 3 "fr_register_operand" "f")]
+ UNSPEC_FR_RECIP_APPROX_RES))
(set (match_operand:BI 1 "register_operand" "=c")
(unspec:BI [(match_operand:XF 2 "fr_register_operand" "f")
(match_dup 3)] UNSPEC_FR_RECIP_APPROX))