From d4f48a7271cf94073194112fb763685043e723dd Mon Sep 17 00:00:00 2001 From: Homer Hsing Date: Fri, 14 Sep 2012 08:32:12 +0800 Subject: [PATCH] Supporting instruction "reverse bits" The bfrev instruction component-wise reverses all the bits in src0 and stores the results in dst. --- assembler/src/brw_defines.h | 1 + assembler/src/gram.y | 4 ++-- assembler/src/lex.l | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/assembler/src/brw_defines.h b/assembler/src/brw_defines.h index 7c5c29fe..9b7d871c 100644 --- a/assembler/src/brw_defines.h +++ b/assembler/src/brw_defines.h @@ -568,6 +568,7 @@ #define BRW_OPCODE_ASR 12 #define BRW_OPCODE_CMP 16 #define BRW_OPCODE_CMPN 17 +#define BRW_OPCODE_BFREV 23 #define BRW_OPCODE_BFE 24 #define BRW_OPCODE_BFI1 25 #define BRW_OPCODE_BFI2 26 diff --git a/assembler/src/gram.y b/assembler/src/gram.y index a0c65f3a..44f5476f 100644 --- a/assembler/src/gram.y +++ b/assembler/src/gram.y @@ -115,7 +115,7 @@ void set_direct_src_operand(struct src_operand *src, struct direct_reg *reg, %token MOV FRC RNDU RNDD RNDE RNDZ NOT LZD %token MUL MAC MACH LINE SAD2 SADA2 DP4 DPH DP3 DP2 %token AVG ADD SEL AND OR XOR SHR SHL ASR CMP CMPN PLN -%token ADDC BFI1 +%token ADDC BFI1 BFREV %token SEND NOP JMPI IF IFF WHILE ELSE BREAK CONT HALT MSAVE %token PUSH MREST POP WAIT DO ENDIF ILLEGAL %token MATH_INST @@ -417,7 +417,7 @@ unaryinstruction: } ; -unaryop: MOV | FRC | RNDU | RNDD | RNDE | RNDZ | NOT | LZD +unaryop: MOV | FRC | RNDU | RNDD | RNDE | RNDZ | NOT | LZD | BFREV ; binaryinstruction: diff --git a/assembler/src/lex.l b/assembler/src/lex.l index 681ce48f..16c464a7 100644 --- a/assembler/src/lex.l +++ b/assembler/src/lex.l @@ -88,6 +88,7 @@ yylval.integer = BRW_CHANNEL_W; "bfe" { yylval.integer = BRW_OPCODE_BFE; return BFE; } "bfi1" { yylval.integer = BRW_OPCODE_BFI1; return BFI1; } "bfi2" { yylval.integer = BRW_OPCODE_BFI2; return BFI2; } +"bfrev" { yylval.integer = BRW_OPCODE_BFREV; return BFREV; } "mul" { yylval.integer = BRW_OPCODE_MUL; return MUL; } "mac" { yylval.integer = BRW_OPCODE_MAC; return MAC; } "mach" { yylval.integer = BRW_OPCODE_MACH; return MACH; }