(define_mode_attr f64_av [(DF "wv") (DD "wn")])
; Definitions for 64-bit access to ISA 3.0 (power9) vector
-(define_mode_attr f64_p9 [(DF "wb") (DD "wn")])
+(define_mode_attr f64_p9 [(DF "v") (DD "wn")])
; These modes do not fit in integer registers in 32-bit mode.
(define_mode_iterator DIFD [DI DF DD])
})
(define_insn_and_split "*extendsfdf2_fpr"
- [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wu,wb")
+ [(set (match_operand:DF 0 "gpc_reg_operand" "=d,?d,d,ws,?ws,wu,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)"
"@
emit_note (NOTE_INSN_DELETED);
DONE;
}
- [(set_attr "type" "fp,fpsimple,fpload,fp,fpsimple,fpload,fpload")])
+ [(set_attr "type" "fp,fpsimple,fpload,fp,fpsimple,fpload,fpload")
+ (set_attr "isa" "*,*,*,*,*,*,p9v")])
(define_insn "*extendsfdf2_snan"
[(set (match_operand:DF 0 "gpc_reg_operand" "=d,ws")
"=r, r, ?*wI, ?*wH, m,
m, wY, Z, r, ?*wIwH,
wIwH")
-
(unspec:SI [(match_operand:SF 1 "input_operand"
"r, m, Z, Z, r,
- f, wb, wu, wIwH, wIwH,
+ f, v, wu, wIwH, wIwH,
r")]
UNSPEC_SI_FROM_SF))
-
(clobber (match_scratch:V4SF 2
"=X, X, X, X, X,
X, X, X, wIwH, X,
X"))]
-
"TARGET_NO_SF_SUBREG
&& (register_operand (operands[0], SImode)
|| register_operand (operands[1], SFmode))"
"*, load, fpload, fpload, store,
fpstore, fpstore, fpstore, mftgpr, fp,
mffgpr")
-
(set_attr "length"
"4, 4, 4, 4, 4,
4, 4, 4, 8, 4,
- 4")])
+ 4")
+ (set_attr "isa"
+ "*, *, *, *, *,
+ *, p9v, *, *, *,
+ *")])
;; movsi_from_sf with zero extension
;;
(define_insn "movsf_hardfloat"
[(set (match_operand:SF 0 "nonimmediate_operand"
- "=!r, f, wb, wu, m, wY,
+ "=!r, f, v, wu, m, wY,
Z, m, ww, !r, f, ww,
!r, *c*l, !r, *h")
(match_operand:SF 1 "input_operand"
- "m, m, wY, Z, f, wb,
+ "m, m, wY, Z, f, v,
wu, r, j, j, f, ww,
r, r, *h, 0"))]
"(register_operand (operands[0], SFmode)
[(set_attr "type"
"load, fpload, fpload, fpload, fpstore, fpstore,
fpstore, store, veclogical, integer, fpsimple, fpsimple,
- *, mtjmpr, mfjmpr, *")])
+ *, mtjmpr, mfjmpr, *")
+ (set_attr "isa"
+ "*, *, p9v, *, *, p9v,
+ *, *, *, *, *, *,
+ *, *, *, *")])
;; LWZ LFIWZX STW STFIWX MTVSRWZ MFVSRWZ
;; FMR MR MT%0 MF%1 NOP
;; STXSIWX GPR->VSX VSX->GPR GPR->GPR
(define_insn_and_split "movsf_from_si"
[(set (match_operand:SF 0 "nonimmediate_operand"
- "=!r, f, wb, wu, m, Z,
+ "=!r, f, v, wu, m, Z,
Z, wy, ?r, !r")
-
(unspec:SF [(match_operand:SI 1 "input_operand"
"m, m, wY, Z, r, f,
wu, r, wy, r")]
UNSPEC_SF_FROM_SI))
-
(clobber (match_scratch:DI 2
"=X, X, X, X, X, X,
X, r, X, X"))]
-
"TARGET_NO_SF_SUBREG
&& (register_operand (operands[0], SFmode)
|| register_operand (operands[1], SImode))"
4, 12, 4, 4")
(set_attr "type"
"load, fpload, fpload, fpload, store, fpstore,
- fpstore, vecfloat, mffgpr, *")])
+ fpstore, vecfloat, mffgpr, *")
+ (set_attr "isa"
+ "*, *, p9v, *, *, *,
+ *, *, *, *")])
\f
;; Move 64-bit binary/decimal floating point
"=m, d, d, <f64_p9>, wY,
<f64_av>, Z, <f64_vsx>, <f64_vsx>, !r,
Y, r, !r")
-
(match_operand:FMOVE64 1 "input_operand"
"d, m, d, wY, <f64_p9>,
Z, <f64_av>, <f64_vsx>, <zero_fp>, <zero_fp>,
r, Y, r"))]
-
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT
&& (gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))"
"fpstore, fpload, fpsimple, fpload, fpstore,
fpload, fpstore, veclogical, veclogical, two,
store, load, two")
-
(set_attr "size" "64")
(set_attr "length"
"4, 4, 4, 4, 4,
4, 4, 4, 4, 8,
- 8, 8, 8")])
+ 8, 8, 8")
+ (set_attr "isa"
+ "*, *, *, p9v, p9v,
+ *, *, *, *, *,
+ *, *, *")])
;; STW LWZ MR G-const H-const F-const
<f64_av>, Z, <f64_vsx>, <f64_vsx>, !r,
YZ, r, !r, *c*l, !r,
*h, r, wg, r, <f64_dm>")
-
(match_operand:FMOVE64 1 "input_operand"
"d, m, d, wY, <f64_p9>,
Z, <f64_av>, <f64_vsx>, <zero_fp>, <zero_fp>,
r, YZ, r, r, *h,
0, wg, r, <f64_dm>, r"))]
-
"TARGET_POWERPC64 && TARGET_HARD_FLOAT
&& (gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))"
"fpstore, fpload, fpsimple, fpload, fpstore,
fpload, fpstore, veclogical, veclogical, integer,
store, load, *, mtjmpr, mfjmpr,
- *, mftgpr, mffgpr, mftgpr, mffgpr")
-
+ *, mftgpr, mffgpr, mftgpr, mffgpr")
(set_attr "size" "64")
- (set_attr "length" "4")])
+ (set_attr "isa"
+ "*, *, *, p9v, p9v,
+ *, *, *, *, *,
+ *, *, *, *, *,
+ *, *, *, *, *")])
;; STD LD MR MT<SPR> MF<SPR> G-const
;; H-const F-const Special
(define_insn "*movdi_internal32"
[(set (match_operand:DI 0 "nonimmediate_operand"
"=Y, r, r, m, ^d, ^d,
- r, wY, Z, ^wb, $wv, ^wi,
+ r, wY, Z, ^v, $wv, ^wi,
wa, wa, wv, wi, *i, wv,
wv")
-
(match_operand:DI 1 "input_operand"
"r, Y, r, ^d, m, ^d,
- IJKnF, ^wb, $wv, wY, Z, ^wi,
+ IJKnF, ^v, $wv, wY, Z, ^wi,
Oj, wM, OjwM, Oj, wM, wS,
wB"))]
-
"! TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], DImode)
|| gpc_reg_operand (operands[1], DImode))"
4")
(set_attr "isa"
"*, *, *, *, *, *,
- *, *, *, *, *, *,
+ *, p9v, *, p9v, *, *,
p9v, p9v, *, *, *, *,
*")])
(define_insn "*movdi_internal64"
[(set (match_operand:DI 0 "nonimmediate_operand"
"=YZ, r, r, r, r, r,
- m, ^d, ^d, wY, Z, $wb,
+ m, ^d, ^d, wY, Z, $v,
$wv, ^wi, wa, wa, wv, wi,
wi, wv, wv, r, *h, *h,
?r, ?wg, ?r, ?wj")
-
(match_operand:DI 1 "input_operand"
"r, YZ, r, I, L, nF,
- ^d, m, ^d, ^wb, $wv, wY,
+ ^d, m, ^d, ^v, $wv, wY,
Z, ^wi, Oj, wM, OjwM, Oj,
wM, wS, wB, *h, r, 0,
wg, r, wj, r"))]
-
"TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], DImode)
|| gpc_reg_operand (operands[1], DImode))"
fpload, veclogical, vecsimple, vecsimple, vecsimple, veclogical,
veclogical, vecsimple, vecsimple, mfjmpr, mtjmpr, *,
mftgpr, mffgpr, mftgpr, mffgpr")
-
(set_attr "size" "64")
(set_attr "length"
"4, 4, 4, 4, 4, 20,
4, 4, 4, 4")
(set_attr "isa"
"*, *, *, *, *, *,
- *, *, *, *, *, *,
+ *, *, *, p9v, *, p9v,
*, *, p9v, p9v, *, *,
*, *, *, *, *, *,
*, *, *, *")])