[PATCH] Add AVX512 k-mask intrinsics
Uros Bizjak
ubizjak@gmail.com
Fri Nov 11 14:34:00 GMT 2016
Some quick remarks:
+(define_insn "kmovb"
+ [(set (match_operand:QI 0 "nonimmediate_operand" "=k,k")
+ (unspec:QI
+ [(match_operand:QI 1 "nonimmediate_operand" "r,km")]
+ UNSPEC_KMOV))]
+ "!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512DQ"
+ "@
+ kmovb\t{%k1, %0|%0, %k1}
+ kmovb\t{%1, %0|%0, %1}";
+ [(set_attr "mode" "QI")
+ (set_attr "type" "mskmov")
+ (set_attr "prefix" "vex")])
+
+(define_insn "kmovd"
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=k,k")
+ (unspec:SI
+ [(match_operand:SI 1 "nonimmediate_operand" "r,km")]
+ UNSPEC_KMOV))]
+ "!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512BW"
+ "@
+ kmovd\t{%k1, %0|%0, %k1}
+ kmovd\t{%1, %0|%0, %1}";
+ [(set_attr "mode" "SI")
+ (set_attr "type" "mskmov")
+ (set_attr "prefix" "vex")])
+
+(define_insn "kmovq"
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=k,k,km")
+ (unspec:DI
+ [(match_operand:DI 1 "nonimmediate_operand" "r,km,k")]
+ UNSPEC_KMOV))]
+ "!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512BW"
+ "@
+ kmovq\t{%k1, %0|%0, %k1}
+ kmovq\t{%1, %0|%0, %1}
+ kmovq\t{%1, %0|%0, %1}";
+ [(set_attr "mode" "DI")
+ (set_attr "type" "mskmov")
+ (set_attr "prefix" "vex")])
- kmovd (and existing kmovw) should be using register_operand for
opreand 0. In this case, there is no need for MEM_P checks at all.
- In the insn constraint, pease check TARGET_AVX before checking MEM_P.
- please put these definitions above corresponding *mov??_internal patterns.
+// case USI_FTYPE_UQI:
+// case USI_FTYPE_UHI:
No commented-out code without a good reason, please.
Uros.
More information about the Gcc-patches
mailing list