return reg.subnr / 4;
}
+static enum gen10_align1_3src_vertical_stride
+to_3src_align1_vstride(enum brw_vertical_stride vstride)
+{
+ switch (vstride) {
+ case BRW_VERTICAL_STRIDE_0:
+ return BRW_ALIGN1_3SRC_VERTICAL_STRIDE_0;
+ case BRW_VERTICAL_STRIDE_2:
+ return BRW_ALIGN1_3SRC_VERTICAL_STRIDE_2;
+ case BRW_VERTICAL_STRIDE_4:
+ return BRW_ALIGN1_3SRC_VERTICAL_STRIDE_4;
+ case BRW_VERTICAL_STRIDE_8:
+ case BRW_VERTICAL_STRIDE_16:
+ return BRW_ALIGN1_3SRC_VERTICAL_STRIDE_8;
+ default:
+ unreachable("invalid vstride");
+ }
+}
+
+
+static enum gen10_align1_3src_src_horizontal_stride
+to_3src_align1_hstride(enum brw_horizontal_stride hstride)
+{
+ switch (hstride) {
+ case BRW_HORIZONTAL_STRIDE_0:
+ return BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_0;
+ case BRW_HORIZONTAL_STRIDE_1:
+ return BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_1;
+ case BRW_HORIZONTAL_STRIDE_2:
+ return BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_2;
+ case BRW_HORIZONTAL_STRIDE_4:
+ return BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_4;
+ default:
+ unreachable("invalid hstride");
+ }
+}
+
static brw_inst *
brw_alu3(struct brw_codegen *p, unsigned opcode, struct brw_reg dest,
struct brw_reg src0, struct brw_reg src1, struct brw_reg src2)
brw_inst_set_3src_a1_src1_type(devinfo, inst, src1.type);
brw_inst_set_3src_a1_src2_type(devinfo, inst, src2.type);
- assert((src0.vstride == BRW_VERTICAL_STRIDE_0 &&
- src0.hstride == BRW_HORIZONTAL_STRIDE_0) ||
- (src0.vstride == BRW_VERTICAL_STRIDE_8 &&
- src0.hstride == BRW_HORIZONTAL_STRIDE_1));
- assert((src1.vstride == BRW_VERTICAL_STRIDE_0 &&
- src1.hstride == BRW_HORIZONTAL_STRIDE_0) ||
- (src1.vstride == BRW_VERTICAL_STRIDE_8 &&
- src1.hstride == BRW_HORIZONTAL_STRIDE_1));
- assert((src2.vstride == BRW_VERTICAL_STRIDE_0 &&
- src2.hstride == BRW_HORIZONTAL_STRIDE_0) ||
- (src2.vstride == BRW_VERTICAL_STRIDE_8 &&
- src2.hstride == BRW_HORIZONTAL_STRIDE_1));
-
brw_inst_set_3src_a1_src0_vstride(devinfo, inst,
- src0.vstride == BRW_VERTICAL_STRIDE_0 ?
- BRW_ALIGN1_3SRC_VERTICAL_STRIDE_0 :
- BRW_ALIGN1_3SRC_VERTICAL_STRIDE_8);
+ to_3src_align1_vstride(src0.vstride));
brw_inst_set_3src_a1_src1_vstride(devinfo, inst,
- src1.vstride == BRW_VERTICAL_STRIDE_0 ?
- BRW_ALIGN1_3SRC_VERTICAL_STRIDE_0 :
- BRW_ALIGN1_3SRC_VERTICAL_STRIDE_8);
+ to_3src_align1_vstride(src1.vstride));
/* no vstride on src2 */
brw_inst_set_3src_a1_src0_hstride(devinfo, inst,
- src0.hstride == BRW_HORIZONTAL_STRIDE_0 ?
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_0 :
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_1);
+ to_3src_align1_hstride(src0.hstride));
brw_inst_set_3src_a1_src1_hstride(devinfo, inst,
- src1.hstride == BRW_HORIZONTAL_STRIDE_0 ?
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_0 :
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_1);
+ to_3src_align1_hstride(src1.hstride));
brw_inst_set_3src_a1_src2_hstride(devinfo, inst,
- src2.hstride == BRW_HORIZONTAL_STRIDE_0 ?
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_0 :
- BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_1);
+ to_3src_align1_hstride(src2.hstride));
brw_inst_set_3src_a1_src0_subreg_nr(devinfo, inst, src0.subnr);
brw_inst_set_3src_src0_reg_nr(devinfo, inst, src0.nr);