Pad NOP instructions instead of the ILLEGAL instruction for entry
authorHomer Hsing <homer.xing@intel.com>
Mon, 17 Sep 2012 08:01:16 +0000 (16:01 +0800)
committerDamien Lespiau <damien.lespiau@intel.com>
Mon, 4 Mar 2013 15:54:32 +0000 (15:54 +0000)
If a label is an entry, the assembler will pad empty instruction
before the label until offset % 4 == 0. In the past, the ILLEGAL
instructions are padded. It may raise exceptions. We use the NOP
instructions instead.

assembler/src/main.c

index 49f201c..4e2117e 100644 (file)
@@ -287,9 +287,10 @@ int main(int argc, char **argv)
            entry->inst_offset = inst_offset;
            entry1 = entry->next;
            if (entry1 && entry1->islabel && is_entry_point(entry1->string)) {
-               // insert empty instructions until (inst_offset+1) % 4 == 0
+               // insert NOP instructions until (inst_offset+1) % 4 == 0
                while (((inst_offset+1) % 4) != 0) {
                    tmp_entry = calloc(sizeof(*tmp_entry), 1);
+                   tmp_entry->instruction.header.opcode = BRW_OPCODE_NOP;
                    entry->next = tmp_entry;
                    tmp_entry->next = entry1;
                    entry = tmp_entry;