summaryrefslogtreecommitdiff
path: root/assembler
diff options
context:
space:
mode:
authorHomer Hsing <homer.xing@intel.com>2012-09-27 13:51:33 +0800
committerDamien Lespiau <damien.lespiau@intel.com>2013-03-04 15:54:33 +0000
commit72a3c194db2682cb00ea882933f17940a5dfde7e (patch)
treeb0ffc88a80ef06cdff74c11f32130f2fdeee2f70 /assembler
parentf55ed65bb28bd8bce416a9dfd32dfc0028cb61bf (diff)
Compile ELSE and WHILE in Gen5 as same way as in Gen4
Diffstat (limited to 'assembler')
-rw-r--r--assembler/src/gram.y11
1 files changed, 7 insertions, 4 deletions
diff --git a/assembler/src/gram.y b/assembler/src/gram.y
index 26625ef2..65e7f205 100644
--- a/assembler/src/gram.y
+++ b/assembler/src/gram.y
@@ -429,8 +429,8 @@ ifelseinstruction: ENDIF
}
| ELSE execsize relativelocation instoptions
{
- // for Gen4
- if(gen_level == 4) {
+ // for Gen4, Gen5
+ if(gen_level <= 5) {
struct direct_reg dst;
struct dst_operand ip_dst;
struct src_operand ip_src;
@@ -509,7 +509,7 @@ ifelseinstruction: ENDIF
loopinstruction: predicate WHILE execsize relativelocation instoptions
{
- if(gen_level == 4) {
+ if(gen_level <= 5) {
struct direct_reg dst;
struct dst_operand ip_dst;
struct src_operand ip_src;
@@ -535,13 +535,16 @@ loopinstruction: predicate WHILE execsize relativelocation instoptions
set_instruction_src1(&$$, &$4);
$$.first_reloc_target = $4.reloc_target;
$$.first_reloc_offset = $4.imm32;
- } else if (gen_level == 7) { // TODO: Gen5, Gen6 also OK?
+ } else if (gen_level == 7) { // TODO: Gen6 also OK?
memset(&$$, 0, sizeof($$));
set_instruction_predicate(&$$, &$1);
$$.header.opcode = $2;
$$.header.execution_size = $3;
$$.first_reloc_target = $4.reloc_target;
$$.first_reloc_offset = $4.imm32;
+ } else {
+ fprintf(stderr, "'WHILE' instruction is not implemented!\n");
+ YYERROR;
}
}
| DO