GLuint src0_width:3; /* 0x001c0000 */
GLuint src0_vert_stride:4; /* 0x01e00000 */
GLuint flag_subreg_nr:1; /* 0x02000000 */
- GLuint pad:6; /* 0xfc000000 */
+ GLuint flag_reg_nr:1; /* 0x04000000 */
+ GLuint pad:5; /* 0xf8000000 */
} da1;
struct
GLuint src0_width:3;
GLuint src0_vert_stride:4;
GLuint flag_subreg_nr:1;
- GLuint pad:6;
+ GLuint flag_reg_nr:1;
+ GLuint pad:5;
} ia1;
struct
GLuint pad0:1;
GLuint src0_vert_stride:4;
GLuint flag_subreg_nr:1;
- GLuint pad1:6;
+ GLuint flag_reg_nr:1;
+ GLuint pad1:5;
} da16;
struct
GLuint pad0:1;
GLuint src0_vert_stride:4;
GLuint flag_subreg_nr:1;
- GLuint pad1:6;
+ GLuint flag_reg_nr:1;
+ GLuint pad1:5;
} ia16;
struct
if (inst->header.predicate_control) {
string (file, "(");
err |= control (file, "predicate inverse", pred_inv, inst->header.predicate_inverse, NULL);
- string (file, "f0");
+ format (file, "f%d", inst->bits2.da1.flag_reg_nr);
if (inst->bits2.da1.flag_subreg_nr)
format (file, ".%d", inst->bits2.da1.flag_subreg_nr);
if (inst->header.access_mode == BRW_ALIGN_1)
if (set_instruction_src0(&$$, &$7) != 0)
YYERROR;
- if ($3.flag_subreg_nr != -1)
+ if ($3.flag_subreg_nr != -1) {
+ $$.bits2.da1.flag_reg_nr = $3.flag_reg_nr;
$$.bits2.da1.flag_subreg_nr = $3.flag_subreg_nr;
+ }
if (gen_level < 6 &&
get_type_size($$.bits1.da1.dest_reg_type) * (1 << $$.header.execution_size) == 64)
if (set_instruction_src1(&$$, &$8) != 0)
YYERROR;
- if ($3.flag_subreg_nr != -1)
+ if ($3.flag_subreg_nr != -1) {
+ $$.bits2.da1.flag_reg_nr = $3.flag_reg_nr;
$$.bits2.da1.flag_subreg_nr = $3.flag_subreg_nr;
+ }
if (gen_level < 6 &&
get_type_size($$.bits1.da1.dest_reg_type) * (1 << $$.header.execution_size) == 64)
if (set_instruction_src1(&$$, &$8) != 0)
YYERROR;
- if ($3.flag_subreg_nr != -1)
+ if ($3.flag_subreg_nr != -1) {
+ $$.bits2.da1.flag_reg_nr = $3.flag_reg_nr;
$$.bits2.da1.flag_subreg_nr = $3.flag_subreg_nr;
+ }
if (gen_level < 6 &&
get_type_size($$.bits1.da1.dest_reg_type) * (1 << $$.header.execution_size) == 64)
flagreg: FLAGREG subregnum
{
- if ($1 > 0) {
+ if ((gen_level <= 6 && $1) > 0 ||
+ (gen_level > 6 && $1 > 1)) {
fprintf(stderr,
"flag register number %d out of range\n", $1);
YYERROR;
predicate: /* empty */
{
$$.header.predicate_control = BRW_PREDICATE_NONE;
+ $$.bits2.da1.flag_reg_nr = 0;
$$.bits2.da1.flag_subreg_nr = 0;
$$.header.predicate_inverse = 0;
}
* set a predicate for one flag register and conditional
* modification on the other flag register.
*/
+ $$.bits2.da1.flag_reg_nr = ($3.reg_nr & 0xF);
$$.bits2.da1.flag_subreg_nr = $3.subreg_nr;
$$.header.predicate_inverse = $2;
}
conditionalmodifier: condition
{
$$.cond = $1;
+ $$.flag_reg_nr = 0;
$$.flag_subreg_nr = -1;
}
| condition DOT flagreg
{
$$.cond = $1;
+ $$.flag_reg_nr = ($3.reg_nr & 0xF);
$$.flag_subreg_nr = $3.subreg_nr;
}
{
instr->header.predicate_control = predicate->header.predicate_control;
instr->header.predicate_inverse = predicate->header.predicate_inverse;
+ instr->bits2.da1.flag_reg_nr = predicate->bits2.da1.flag_reg_nr;
instr->bits2.da1.flag_subreg_nr = predicate->bits2.da1.flag_subreg_nr;
}