i965: Use the SEL instruction to implement MIN and MAX.
Saves an instruction over doing conditional moves.
This commit is contained in:
parent
13a13fcb80
commit
ba541b0769
|
@ -633,14 +633,10 @@ void emit_max(struct brw_compile *p,
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
if (mask & (1<<i)) {
|
if (mask & (1<<i)) {
|
||||||
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_GE, arg0[i], arg1[i]);
|
||||||
brw_MOV(p, dst[i], arg0[i]);
|
|
||||||
brw_set_saturate(p, 0);
|
|
||||||
|
|
||||||
brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
|
|
||||||
|
|
||||||
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
||||||
brw_MOV(p, dst[i], arg1[i]);
|
brw_SEL(p, dst[i], arg0[i], arg1[i]);
|
||||||
brw_set_saturate(p, 0);
|
brw_set_saturate(p, 0);
|
||||||
brw_set_predicate_control_flag_value(p, 0xff);
|
brw_set_predicate_control_flag_value(p, 0xff);
|
||||||
}
|
}
|
||||||
|
@ -657,14 +653,10 @@ void emit_min(struct brw_compile *p,
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
if (mask & (1<<i)) {
|
if (mask & (1<<i)) {
|
||||||
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
|
||||||
brw_MOV(p, dst[i], arg1[i]);
|
|
||||||
brw_set_saturate(p, 0);
|
|
||||||
|
|
||||||
brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
|
brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
|
||||||
|
|
||||||
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
|
||||||
brw_MOV(p, dst[i], arg0[i]);
|
brw_SEL(p, dst[i], arg0[i], arg1[i]);
|
||||||
brw_set_saturate(p, 0);
|
brw_set_saturate(p, 0);
|
||||||
brw_set_predicate_control_flag_value(p, 0xff);
|
brw_set_predicate_control_flag_value(p, 0xff);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue