; instructions added in ISA 2.07 (power8)
(define_mode_attr Fv2 [(SF "wy") (DF "ws") (DI "wi")])
-; SF/DF constraint for arithmetic on altivec registers
-(define_mode_attr Fa [(SF "wu") (DF "wv")])
-
; s/d suffix for things like sdiv/ddiv
(define_mode_attr Fs [(SF "s") (DF "d")])
(define_insn "zero_extendsi<mode>2"
- [(set (match_operand:EXTSI 0 "gpc_reg_operand" "=r,r,wz,wu,wj,r,wIwH")
+ [(set (match_operand:EXTSI 0 "gpc_reg_operand" "=r,r,wz,wa,wj,r,wIwH")
(zero_extend:EXTSI (match_operand:SI 1 "reg_or_mem_operand" "m,r,Z,Z,r,wIwH,wIwH")))]
""
"@
mfvsrwz %0,%x1
xxextractuw %x0,%x1,4"
[(set_attr "type" "load,shift,fpload,fpload,mffgpr,mftgpr,vecexts")
- (set_attr "isa" "*,*,*,*,*,*,p9v")])
+ (set_attr "isa" "*,*,*,p8v,*,*,p9v")])
(define_insn_and_split "*zero_extendsi<mode>2_dot"
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
(define_insn "extendsi<mode>2"
[(set (match_operand:EXTSI 0 "gpc_reg_operand"
- "=r, r, wl, wu, wj, wH, wH, wr")
-
+ "=r, r, wl, wa, wj, wH, wH, wr")
(sign_extend:EXTSI (match_operand:SI 1 "lwa_operand"
"YZ, r, Z, Z, r, wH, wH, ?wIwH")))]
""
[(set_attr "type" "load,exts,fpload,fpload,mffgpr,vecexts,vecperm,mftgpr")
(set_attr "sign_extend" "yes")
(set_attr "length" "4,4,4,4,4,4,8,8")
- (set_attr "isa" "*,*,*,*,*,p9v,*,*")])
+ (set_attr "isa" "*,*,*,p8v,*,p9v,*,*")])
(define_split
[(set (match_operand:EXTSI 0 "int_reg_operand")
})
(define_insn_and_split "*extendsfdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wu,v")
+ [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wa,v")
(float_extend:DF (match_operand:SF 1 "reg_or_mem_operand" "0,f,m,0,wy,Z,wY")))]
"TARGET_HARD_FLOAT && !HONOR_SNANS (SFmode)"
"@
DONE;
}
[(set_attr "type" "fp,fpsimple,fpload,fp,fpsimple,fpload,fpload")
- (set_attr "isa" "*,*,*,*,*,*,p9v")])
+ (set_attr "isa" "*,*,*,*,*,p8v,p9v")])
(define_insn "*extendsfdf2_snan"
[(set (match_operand:DF 0 "gpc_reg_operand" "=d,ws")
})
; An UNSPEC is used so we don't have to support SImode in FP registers.
-; The 'wu' constraint is used for the 2nd alternative to ensure stxsiwx
-; is only generated for Power8 or later.
(define_insn "stfiwx"
[(set (match_operand:SI 0 "memory_operand" "=Z,Z")
- (unspec:SI [(match_operand:DI 1 "gpc_reg_operand" "d,wu")]
+ (unspec:SI [(match_operand:DI 1 "gpc_reg_operand" "d,wa")]
UNSPEC_STFIWX))]
"TARGET_PPC_GFXOPT"
"@
stfiwx %1,%y0
stxsiwx %x1,%y0"
- [(set_attr "type" "fpstore")])
+ [(set_attr "type" "fpstore")
+ (set_attr "isa" "*,p8v")])
;; If we don't have a direct conversion to single precision, don't enable this
;; conversion for 32-bit without fast math, because we don't have the insn to
"")
(define_insn "floatunsdisf2_fcfidus"
- [(set (match_operand:SF 0 "gpc_reg_operand" "=f,wu")
+ [(set (match_operand:SF 0 "gpc_reg_operand" "=f,wa")
(unsigned_float:SF (match_operand:DI 1 "gpc_reg_operand" "d,wi")))]
"TARGET_HARD_FLOAT && TARGET_FCFIDUS"
"@
fcfidus %0,%1
xscvuxdsp %x0,%x1"
- [(set_attr "type" "fp")])
+ [(set_attr "type" "fp")
+ (set_attr "isa" "*,p8v")])
(define_insn_and_split "*floatunsdisf2_mem"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f,wy,wy")
[(set (match_operand:SI 0 "nonimmediate_operand"
"=r, r, r, wI, wH,
m, Z, Z, r, r,
- r, wIwH, wIwH, wIwH, wu,
+ r, wIwH, wIwH, wIwH, v,
wIwH, wH, wH, wIwH, r,
r, *h, *h")
(match_operand:SI 1 "input_operand"
(set_attr "isa"
"*, *, *, *, *,
*, *, *, *, *,
- *, *, p9v, p9v, *,
+ *, *, p9v, p9v, p8v,
p9v, *, p9v, *, *,
*, *, *")])
wIwH")
(unspec:SI [(match_operand:SF 1 "input_operand"
"r, m, Z, Z, r,
- f, v, wu, wIwH, wIwH,
+ f, v, wa, wIwH, wIwH,
r")]
UNSPEC_SI_FROM_SF))
(clobber (match_scratch:V4SF 2
4")
(set_attr "isa"
"*, *, *, *, *,
- *, p9v, *, *, *,
+ *, p9v, p8v, *, *,
*")])
;; movsi_from_sf with zero extension
(define_insn "movsf_hardfloat"
[(set (match_operand:SF 0 "nonimmediate_operand"
- "=!r, f, v, wu, m, wY,
+ "=!r, f, v, wa, m, wY,
Z, m, ww, !r, f, ww,
!r, *c*l, !r, *h")
(match_operand:SF 1 "input_operand"
"m, m, wY, Z, f, v,
- wu, r, j, j, f, ww,
+ wa, r, j, j, f, ww,
r, r, *h, 0"))]
"(register_operand (operands[0], SFmode)
|| register_operand (operands[1], SFmode))
fpstore, store, veclogical, integer, fpsimple, fpsimple,
*, mtjmpr, mfjmpr, *")
(set_attr "isa"
- "*, *, p9v, *, *, p9v,
- *, *, *, *, *, *,
+ "*, *, p9v, p8v, *, p9v,
+ p8v, *, *, *, *, *,
*, *, *, *")])
;; LWZ LFIWZX STW STFIWX MTVSRWZ MFVSRWZ
;; STXSIWX GPR->VSX VSX->GPR GPR->GPR
(define_insn_and_split "movsf_from_si"
[(set (match_operand:SF 0 "nonimmediate_operand"
- "=!r, f, v, wu, m, Z,
+ "=!r, f, v, wa, m, Z,
Z, wy, ?r, !r")
(unspec:SF [(match_operand:SI 1 "input_operand"
"m, m, wY, Z, r, f,
- wu, r, wy, r")]
+ wa, r, wy, r")]
UNSPEC_SF_FROM_SI))
(clobber (match_scratch:DI 2
"=X, X, X, X, X, X,
"load, fpload, fpload, fpload, store, fpstore,
fpstore, vecfloat, mffgpr, *")
(set_attr "isa"
- "*, *, p9v, *, *, *,
- *, *, *, *")])
+ "*, *, p9v, p8v, *, *,
+ p8v, *, *, *")])
\f
;; Move 64-bit binary/decimal floating point