Add many more opcodes.
authorEric Anholt <eric@anholt.net>
Fri, 25 Aug 2006 18:05:10 +0000 (11:05 -0700)
committerDamien Lespiau <damien.lespiau@intel.com>
Mon, 4 Mar 2013 15:54:22 +0000 (15:54 +0000)
assembler/brw_defines.h
assembler/gram.y
assembler/lex.l

index 11f2022..4ec0224 100644 (file)
 #define BRW_OPCODE_RSL        11
 #define BRW_OPCODE_ASR        12
 #define BRW_OPCODE_CMP        16
+#define BRW_OPCODE_CMPN        17
 #define BRW_OPCODE_JMPI       32
 #define BRW_OPCODE_IF         34
 #define BRW_OPCODE_IFF        35
index 7ed2f41..1dea59d 100644 (file)
 %token <integer> GENREG MSGREG ACCREG ADDRESSREG
 %token FLAGREG CONTROLREG IPREG
 
-%token MOV
-%token MUL MAC MACH LINE SAD2 SADA2 DP4 DPH DP3 DP2
-%token ADD
-%token SEND NULL_TOKEN MATH SAMPLER GATEWAY READ WRITE URB THREAD_SPAWNER
-%token NOP
+%token <integer> MOV FRC RNDU RNDD RNDE RNDZ NOT LZD
+%token <integer> MUL MAC MACH LINE SAD2 SADA2 DP4 DPH DP3 DP2
+%token <integer> AVG ADD SEL AND OR XOR SHR SHL ASR CMP CMPN
+%token <integer> SEND NOP JMPI IF IFF WHILE SEND ELSE BREAK CONT HALT MSAVE
+%token <integer> PUSH MREST POP WAIT DO ENDIF ILLEGAL
+
+%token NULL_TOKEN MATH SAMPLER GATEWAY READ WRITE URB THREAD_SPAWNER
 
 %token MSGLEN RETURNLEN
 %token <integer> ALLOCATE USED COMPLETE TRANSPOSE INTERLEAVE
@@ -161,7 +163,7 @@ unaryinstruction:
                }
 ;
 
-unaryop:       MOV { $$ = BRW_OPCODE_MOV; }
+unaryop:       MOV | FRC | RNDU | RNDD | RNDE | RNDZ | NOT | LZD
 ;
 
 binaryinstruction:
@@ -180,8 +182,7 @@ binaryinstruction:
                }
 ;
 
-binaryop:      MUL { $$ = BRW_OPCODE_MUL; }
-               | MAC { $$ = BRW_OPCODE_MAC; }
+binaryop:      MUL | MAC | MACH | LINE | SAD2 | SADA2 | DP4 | DPH | DP3 | DP2
 
 binaryaccinstruction:
                predicate binaryaccop conditionalmodifier saturate execsize
@@ -199,7 +200,7 @@ binaryaccinstruction:
                }
 ;
 
-binaryaccop:   ADD { $$ = BRW_OPCODE_ADD; }
+binaryaccop:   AVG | ADD | SEL | AND | OR | XOR | SHR | SHL | ASR | CMP | CMPN
 ;
 
 triinstruction:        sendinstruction
@@ -217,7 +218,7 @@ sendinstruction: predicate SEND execsize INTEGER post_dst payload msgtarget
                   * implicitly loaded if non-null.
                   */
                  bzero(&$$, sizeof($$));
-                 $$.header.opcode = BRW_OPCODE_SEND;
+                 $$.header.opcode = $2;
                  $$.header.execution_size = $3;
                  $$.header.destreg__conditionalmod = $4; /* msg reg index */
                  set_instruction_dest(&$$, &$5);
@@ -231,10 +232,18 @@ sendinstruction: predicate SEND execsize INTEGER post_dst payload msgtarget
                    $12.bits3.generic.end_of_thread;
                }
 
+branchloopop:  IF | IFF | WHILE
+;
+
+breakop:       BREAK | CONT | WAIT
+
+maskpushop:    MSAVE | PUSH
+;
+
 specialinstruction: NOP
                {
                  bzero(&$$, sizeof($$));
-                 $$.header.opcode = BRW_OPCODE_NOP;
+                 $$.header.opcode = $1;
                }
 
 /* XXX! */
index e60b228..ab418da 100644 (file)
@@ -27,24 +27,58 @@ int saved_state = INITIAL;
 "null" { return NULL_TOKEN; }
 
  /* opcodes */
-"mov" { return MOV; }
-
-"mul" { return MUL; }
-"mac" { return MAC; }
-"mach" { return MACH; }
-"line" { return LINE; }
-"sad2" { return SAD2; }
-"sada2" { return SADA2; }
-"dp4" { return DP4; }
-"dph" { return DPH; }
-"dp3" { return DP3; }
-"dp2" { return DP2; }
-
-"add" { return ADD; }
-
-"nop" { return NOP; }
-
-"send" { return SEND; }
+"mov" { yylval.integer = BRW_OPCODE_MOV; return MOV; }
+"frc" { yylval.integer = BRW_OPCODE_FRC; return FRC; }
+"rndu" { yylval.integer = BRW_OPCODE_RNDU; return RNDU; }
+"rndd" { yylval.integer = BRW_OPCODE_RNDD; return RNDD; }
+"rnde" { yylval.integer = BRW_OPCODE_RNDE; return RNDE; }
+"rndz" { yylval.integer = BRW_OPCODE_RNDZ; return RNDZ; }
+"not" { yylval.integer = BRW_OPCODE_NOT; return NOT; }
+"lzd" { yylval.integer = BRW_OPCODE_LZD; return LZD; }
+
+"mul" { yylval.integer = BRW_OPCODE_MUL; return MUL; }
+"mac" { yylval.integer = BRW_OPCODE_MAC; return MAC; }
+"mach" { yylval.integer = BRW_OPCODE_MACH; return MACH; }
+"line" { yylval.integer = BRW_OPCODE_LINE; return LINE; }
+"sad2" { yylval.integer = BRW_OPCODE_SAD2; return SAD2; }
+"sada2" { yylval.integer = BRW_OPCODE_SADA2; return SADA2; }
+"dp4" { yylval.integer = BRW_OPCODE_DP4; return DP4; }
+"dph" { yylval.integer = BRW_OPCODE_DPH; return DPH; }
+"dp3" { yylval.integer = BRW_OPCODE_DP3; return DP3; }
+"dp2" { yylval.integer = BRW_OPCODE_DP2; return DP2; }
+
+"avg" { yylval.integer = BRW_OPCODE_AVG; return AVG; }
+"add" { yylval.integer = BRW_OPCODE_ADD; return ADD; }
+"sel" { yylval.integer = BRW_OPCODE_SEL; return SEL; }
+"and" { yylval.integer = BRW_OPCODE_AND; return AND; }
+"or" { yylval.integer = BRW_OPCODE_OR; return OR; }
+"xor" { yylval.integer = BRW_OPCODE_XOR; return XOR; }
+"shr" { yylval.integer = BRW_OPCODE_SHR; return SHR; }
+"shl" { yylval.integer = BRW_OPCODE_SHL; return SHL; }
+"asr" { yylval.integer = BRW_OPCODE_ASR; return ASR; }
+"cmp" { yylval.integer = BRW_OPCODE_CMP; return CMP; }
+"cmpn" { yylval.integer = BRW_OPCODE_CMPN; return CMPN; }
+
+"send" { yylval.integer = BRW_OPCODE_SEND; return SEND; }
+"nop" { yylval.integer = BRW_OPCODE_NOP; return NOP; }
+"jmpi" { yylval.integer = BRW_OPCODE_JMPI; return JMPI; }
+"if" { yylval.integer = BRW_OPCODE_IF; return IF; }
+"iff" { yylval.integer = BRW_OPCODE_IFF; return IFF; }
+"while" { yylval.integer = BRW_OPCODE_NOP; return NOP; }
+"send" { yylval.integer = BRW_OPCODE_SEND; return SEND; }
+"else" { yylval.integer = BRW_OPCODE_ELSE; return ELSE; }
+"break" { yylval.integer = BRW_OPCODE_BREAK; return BREAK; }
+"cont" { yylval.integer = BRW_OPCODE_CONTINUE; return CONT; }
+"halt" { yylval.integer = BRW_OPCODE_HALT; return HALT; }
+"msave" { yylval.integer = BRW_OPCODE_MSAVE; return MSAVE; }
+"push" { yylval.integer = BRW_OPCODE_PUSH; return PUSH; }
+"mrest" { yylval.integer = BRW_OPCODE_MRESTORE; return MREST; }
+"pop" { yylval.integer = BRW_OPCODE_POP; return POP; }
+"wait" { yylval.integer = BRW_OPCODE_WAIT; return WAIT; }
+"do" { yylval.integer = BRW_OPCODE_DO; return DO; }
+"endif" { yylval.integer = BRW_OPCODE_ENDIF; return ENDIF; }
+
+ /* send argument tokens */
 "mlen" { return MSGLEN; }
 "rlen" { return RETURNLEN; }
 "math" { return MATH; }