summaryrefslogtreecommitdiff
path: root/assembler
diff options
context:
space:
mode:
Diffstat (limited to 'assembler')
-rw-r--r--assembler/gram.y121
1 files changed, 45 insertions, 76 deletions
diff --git a/assembler/gram.y b/assembler/gram.y
index 23d7cfb1..99376a2c 100644
--- a/assembler/gram.y
+++ b/assembler/gram.y
@@ -526,6 +526,49 @@ static void resolve_subnr(struct brw_reg *reg)
YYERROR; \
} while(0)
+static void add_option(struct brw_program_instruction *insn, int option)
+{
+ switch (option) {
+ case ALIGN1:
+ GEN(insn)->header.access_mode = BRW_ALIGN_1;
+ break;
+ case ALIGN16:
+ GEN(insn)->header.access_mode = BRW_ALIGN_16;
+ break;
+ case SECHALF:
+ GEN(insn)->header.compression_control |= BRW_COMPRESSION_2NDHALF;
+ break;
+ case COMPR:
+ if (!IS_GENp(6))
+ GEN(insn)->header.compression_control |= BRW_COMPRESSION_COMPRESSED;
+ break;
+ case SWITCH:
+ GEN(insn)->header.thread_control |= BRW_THREAD_SWITCH;
+ break;
+ case ATOMIC:
+ GEN(insn)->header.thread_control |= BRW_THREAD_ATOMIC;
+ break;
+ case NODDCHK:
+ GEN(insn)->header.dependency_control |= BRW_DEPENDENCY_NOTCHECKED;
+ break;
+ case NODDCLR:
+ GEN(insn)->header.dependency_control |= BRW_DEPENDENCY_NOTCLEARED;
+ break;
+ case MASK_DISABLE:
+ GEN(insn)->header.mask_control = BRW_MASK_DISABLE;
+ break;
+ case BREAKPOINT:
+ GEN(insn)->header.debug_control = BRW_DEBUG_BREAKPOINT;
+ break;
+ case ACCWRCTRL:
+ GEN(insn)->header.acc_wr_control = BRW_ACCUMULATOR_WRITE_ENABLE;
+ break;
+ case EOT:
+ GEN(insn)->bits3.generic.end_of_thread = 1;
+ break;
+ }
+}
+
}
%%
@@ -2723,86 +2766,12 @@ instoptions: /* empty */
instoption_list:instoption_list COMMA instoption
{
$$ = $1;
- switch ($3) {
- case ALIGN1:
- GEN(&$$)->header.access_mode = BRW_ALIGN_1;
- break;
- case ALIGN16:
- GEN(&$$)->header.access_mode = BRW_ALIGN_16;
- break;
- case SECHALF:
- GEN(&$$)->header.compression_control |= BRW_COMPRESSION_2NDHALF;
- break;
- case COMPR:
- if (!IS_GENp(6)) {
- GEN(&$$)->header.compression_control |=
- BRW_COMPRESSION_COMPRESSED;
- }
- break;
- case SWITCH:
- GEN(&$$)->header.thread_control |= BRW_THREAD_SWITCH;
- break;
- case ATOMIC:
- GEN(&$$)->header.thread_control |= BRW_THREAD_ATOMIC;
- break;
- case NODDCHK:
- GEN(&$$)->header.dependency_control |= BRW_DEPENDENCY_NOTCHECKED;
- break;
- case NODDCLR:
- GEN(&$$)->header.dependency_control |= BRW_DEPENDENCY_NOTCLEARED;
- break;
- case MASK_DISABLE:
- GEN(&$$)->header.mask_control = BRW_MASK_DISABLE;
- break;
- case BREAKPOINT:
- GEN(&$$)->header.debug_control = BRW_DEBUG_BREAKPOINT;
- break;
- case ACCWRCTRL:
- GEN(&$$)->header.acc_wr_control = BRW_ACCUMULATOR_WRITE_ENABLE;
- }
+ add_option(&$$, $3);
}
| instoption_list instoption
{
$$ = $1;
- switch ($2) {
- case ALIGN1:
- GEN(&$$)->header.access_mode = BRW_ALIGN_1;
- break;
- case ALIGN16:
- GEN(&$$)->header.access_mode = BRW_ALIGN_16;
- break;
- case SECHALF:
- GEN(&$$)->header.compression_control |= BRW_COMPRESSION_2NDHALF;
- break;
- case COMPR:
- if (!IS_GENp(6)) {
- GEN(&$$)->header.compression_control |=
- BRW_COMPRESSION_COMPRESSED;
- }
- break;
- case SWITCH:
- GEN(&$$)->header.thread_control |= BRW_THREAD_SWITCH;
- break;
- case ATOMIC:
- GEN(&$$)->header.thread_control |= BRW_THREAD_ATOMIC;
- break;
- case NODDCHK:
- GEN(&$$)->header.dependency_control |= BRW_DEPENDENCY_NOTCHECKED;
- break;
- case NODDCLR:
- GEN(&$$)->header.dependency_control |= BRW_DEPENDENCY_NOTCLEARED;
- break;
- case MASK_DISABLE:
- GEN(&$$)->header.mask_control = BRW_MASK_DISABLE;
- break;
- case BREAKPOINT:
- GEN(&$$)->header.debug_control = BRW_DEBUG_BREAKPOINT;
- break;
- case EOT:
- /* XXX: EOT shouldn't be an instoption, I don't think */
- GEN(&$$)->bits3.generic.end_of_thread = 1;
- break;
- }
+ add_option(&$$, $2);
}
| /* empty, header defaults to zeroes. */
{