Lines Matching defs:reg
407 struct brw_reg reg;
417 reg.type = type;
418 reg.file = file;
419 reg.negate = negate;
420 reg.abs = abs;
421 reg.address_mode = BRW_ADDRESS_DIRECT;
422 reg.pad0 = 0;
423 reg.subnr = subnr * type_sz(type);
424 reg.nr = nr;
426 /* Could do better: If the reg is r5.3<0;1,0>, we probably want to
432 reg.swizzle = swizzle;
433 reg.writemask = writemask;
434 reg.indirect_offset = 0;
435 reg.vstride = vstride;
436 reg.width = width;
437 reg.hstride = hstride;
438 reg.pad1 = 0;
439 return reg;
548 retype(struct brw_reg reg, enum brw_reg_type type)
550 reg.type = type;
551 return reg;
555 firsthalf(struct brw_reg reg)
557 return reg;
561 sechalf(struct brw_reg reg)
563 if (reg.vstride)
564 reg.nr++;
565 return reg;
569 offset(struct brw_reg reg, unsigned delta)
571 reg.nr += delta;
572 return reg;
577 byte_offset(struct brw_reg reg, unsigned bytes)
579 unsigned newoffset = reg.nr * REG_SIZE + reg.subnr + bytes;
580 reg.nr = newoffset / REG_SIZE;
581 reg.subnr = newoffset % REG_SIZE;
582 return reg;
586 suboffset(struct brw_reg reg, unsigned delta)
588 return byte_offset(reg, delta * type_sz(reg.type));
757 brw_address(struct brw_reg reg)
759 return brw_imm_uw(reg.nr * REG_SIZE + reg.subnr);
898 brw_flag_reg(int reg, int subreg)
901 BRW_ARF_FLAG + reg, subreg);
980 stride(struct brw_reg reg, unsigned vstride, unsigned width, unsigned hstride)
982 reg.vstride = cvt(vstride);
983 reg.width = cvt(width) - 1;
984 reg.hstride = cvt(hstride);
985 return reg;
993 spread(struct brw_reg reg, unsigned s)
998 if (reg.hstride)
999 reg.hstride += cvt(s) - 1;
1001 if (reg.vstride)
1002 reg.vstride += cvt(s) - 1;
1004 return reg;
1006 return stride(reg, 0, 1, 0);
1011 * Reinterpret each channel of register \p reg as a vector of values of the
1015 subscript(struct brw_reg reg, enum brw_reg_type type, unsigned i)
1017 unsigned scale = type_sz(reg.type) / type_sz(type);
1020 if (reg.file == IMM) {
1022 reg.u64 >>= i * bit_size;
1023 reg.u64 &= BITFIELD64_MASK(bit_size);
1025 reg.u64 |= reg.u64 << 16;
1026 return retype(reg, type);
1029 return suboffset(retype(spread(reg, scale), type), i);
1033 vec16(struct brw_reg reg)
1035 return stride(reg, 16,16,1);
1039 vec8(struct brw_reg reg)
1041 return stride(reg, 8,8,1);
1045 vec4(struct brw_reg reg)
1047 return stride(reg, 4,4,1);
1051 vec2(struct brw_reg reg)
1053 return stride(reg, 2,2,1);
1057 vec1(struct brw_reg reg)
1059 return stride(reg, 0,1,0);
1064 get_element(struct brw_reg reg, unsigned elt)
1066 return vec1(suboffset(reg, elt));
1070 get_element_ud(struct brw_reg reg, unsigned elt)
1072 return vec1(suboffset(retype(reg, BRW_REGISTER_TYPE_UD), elt));
1076 get_element_d(struct brw_reg reg, unsigned elt)
1078 return vec1(suboffset(retype(reg, BRW_REGISTER_TYPE_D), elt));
1082 brw_swizzle(struct brw_reg reg, unsigned swz)
1084 if (reg.file == BRW_IMMEDIATE_VALUE)
1085 reg.ud = brw_swizzle_immediate(reg.type, reg.ud, swz);
1087 reg.swizzle = brw_compose_swizzle(swz, reg.swizzle);
1089 return reg;
1093 brw_writemask(struct brw_reg reg, unsigned mask)
1095 assert(reg.file != BRW_IMMEDIATE_VALUE);
1096 reg.writemask &= mask;
1097 return reg;
1101 brw_set_writemask(struct brw_reg reg, unsigned mask)
1103 assert(reg.file != BRW_IMMEDIATE_VALUE);
1104 reg.writemask = mask;
1105 return reg;
1122 negate(struct brw_reg reg)
1124 reg.negate ^= 1;
1125 return reg;
1129 brw_abs(struct brw_reg reg)
1131 reg.abs = 1;
1132 reg.negate = 0;
1133 return reg;
1141 struct brw_reg reg = brw_vec4_grf(0, 0);
1142 reg.subnr = subnr;
1143 reg.address_mode = BRW_ADDRESS_REGISTER_INDIRECT_REGISTER;
1144 reg.indirect_offset = offset;
1145 return reg;
1151 struct brw_reg reg = brw_vec1_grf(0, 0);
1152 reg.subnr = subnr;
1153 reg.address_mode = BRW_ADDRESS_REGISTER_INDIRECT_REGISTER;
1154 reg.indirect_offset = offset;
1155 return reg;
1161 struct brw_reg reg = brw_vec1_grf(0, 0);
1162 reg.vstride = BRW_VERTICAL_STRIDE_ONE_DIMENSIONAL;
1163 reg.subnr = subnr;
1164 reg.address_mode = BRW_ADDRESS_REGISTER_INDIRECT_REGISTER;
1165 reg.indirect_offset = offset;
1166 return reg;
1229 region_matches(struct brw_reg reg, enum brw_vertical_stride v,
1232 return reg.vstride == v &&
1233 reg.width == w &&
1234 reg.hstride == h;
1237 #define has_scalar_region(reg) \
1238 region_matches(reg, BRW_VERTICAL_STRIDE_0, BRW_WIDTH_1, \
1242 * Return the size in bytes per data element of register \p reg on the
1246 element_sz(struct brw_reg reg)
1248 if (reg.file == BRW_IMMEDIATE_VALUE || has_scalar_region(reg)) {
1249 return type_sz(reg.type);
1251 } else if (reg.width == BRW_WIDTH_1 &&
1252 reg.hstride == BRW_HORIZONTAL_STRIDE_0) {
1253 assert(reg.vstride != BRW_VERTICAL_STRIDE_0);
1254 return type_sz(reg.type) << (reg.vstride - 1);
1257 assert(reg.hstride != BRW_HORIZONTAL_STRIDE_0);
1258 assert(reg.vstride == reg.hstride + reg.width);
1259 return type_sz(reg.type) << (reg.hstride - 1);