diff options
author | Homer Hsing <homer.xing@intel.com> | 2012-09-27 15:39:28 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2012-09-28 04:06:00 -0400 |
commit | c3be8d13910e2ef19a2e10bfdb2f354a90fb75be (patch) | |
tree | 24d85c20f3a09f74871a60897ac717ce35fc126e | |
parent | e1122bde00707a51d5067c65be3094bcad8e419a (diff) |
Support Gen6 RET instruction.
-rw-r--r-- | src/gram.y | 32 |
1 files changed, 12 insertions, 20 deletions
@@ -630,29 +630,21 @@ subroutineinstruction: } | predicate RET execsize dstoperandex src instoptions { - if($3 != 1 /* encoded int 2 */) { - fprintf(stderr, "The execution size of RET should be 2.\n"); - YYERROR; - } - if($4.reg_file != BRW_ARCHITECTURE_REGISTER_FILE && $4.reg_nr != BRW_ARF_NULL) { - fprintf(stderr, "The dest reg of RET should be NULL.\n"); - YYERROR; - } - if($5.reg_type != BRW_REGISTER_TYPE_UD && $5.reg_type != BRW_REGISTER_TYPE_D) { - fprintf(stderr, "The source reg type of RET should be UD or D.\n"); - YYERROR; - } - if($5.horiz_stride != 1 /*encoded 1*/ - || $5.width != 1 /*encoded 2*/ - || $5.vert_stride != 2 /*encoded 2*/) { - fprintf(stderr, "The source reg region of RET should be <2,2,1>.\n"); - YYERROR; - } + /* + Gen6, 7: + source cannot be accumulator. + dest must be null. + src0 region control must be <2,2,1> (not specified clearly. should be same as CALL) + */ memset(&$$, 0, sizeof($$)); set_instruction_predicate(&$$, &$1); $$.header.opcode = $2; - $$.header.execution_size = $3; - set_instruction_dest(&$$, &$4); + $$.header.execution_size = 1; /* execution size of RET should be 2 */ + set_instruction_dest(&$$, dst_null_reg); + $5.reg_type = BRW_REGISTER_TYPE_D; + $5.horiz_stride = 1; /*encoded 1*/ + $5.width = 1; /*encoded 2*/ + $5.vert_stride = 2; /*encoded 2*/ set_instruction_src0(&$$, &$5); } ; |