NV fp parser: Add support for absolute value operator on instruction operands

This commit is contained in:
Ian Romanick
2009-09-03 14:32:48 -07:00
parent 5db8ebb8f5
commit eeb1402c05
2 changed files with 1153 additions and 1051 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -181,7 +181,7 @@ static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
%type <inst> KIL_instruction
%type <dst_reg> dstReg maskedDstReg maskedAddrReg
%type <src_reg> srcReg scalarSrcReg swizzleSrcReg
%type <src_reg> srcReg scalarUse scalarSrcReg swizzleSrcReg
%type <swiz_mask> scalarSuffix swizzleSuffix extendedSwizzle
%type <ext_swizzle> extSwizComp extSwizSel
%type <swiz_mask> optionalMask
@@ -523,29 +523,50 @@ SWZ_instruction: SWZ maskedDstReg ',' srcReg ',' extendedSwizzle
}
;
scalarSrcReg: optionalSign srcReg scalarSuffix
scalarSrcReg: optionalSign scalarUse
{
$$ = $2;
if ($1) {
$$.Base.Negate = ~$$.Base.Negate;
}
}
| optionalSign '|' scalarUse '|'
{
$$ = $3;
if (!state->option.NV_fragment) {
yyerror(& @2, state, "unexpected character '|'");
YYERROR;
}
if ($1) {
$$.Base.Negate = ~$$.Base.Negate;
}
$$.Base.Abs = 1;
}
;
scalarUse: srcReg scalarSuffix
{
$$ = $1;
$$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
$3.swizzle);
$2.swizzle);
}
| optionalSign paramConstScalarUse
| paramConstScalarUse
{
struct asm_symbol temp_sym;
if (!state->option.NV_fragment) {
yyerror(& @2, state, "expected scalar suffix");
yyerror(& @1, state, "expected scalar suffix");
YYERROR;
}
memset(& temp_sym, 0, sizeof(temp_sym));
temp_sym.param_binding_begin = ~0;
initialize_symbol_from_const(state->prog, & temp_sym, & $2);
initialize_symbol_from_const(state->prog, & temp_sym, & $1);
init_src_reg(& $$);
$$.Base.File = PROGRAM_CONSTANT;
@@ -564,6 +585,24 @@ swizzleSrcReg: optionalSign srcReg swizzleSuffix
$$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
$3.swizzle);
}
| optionalSign '|' srcReg swizzleSuffix '|'
{
$$ = $3;
if (!state->option.NV_fragment) {
yyerror(& @2, state, "unexpected character '|'");
YYERROR;
}
if ($1) {
$$.Base.Negate = ~$$.Base.Negate;
}
$$.Base.Abs = 1;
$$.Base.Swizzle = _mesa_combine_swizzles($$.Base.Swizzle,
$4.swizzle);
}
;
maskedDstReg: dstReg optionalMask