Pad NOP instructions instead of the ILLEGAL instruction for entry

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.
This commit is contained in:
Homer Hsing 2012-09-17 16:01:16 +08:00 committed by Damien Lespiau
parent e6d61ac202
commit 5defbd37b6

View File

@ -287,9 +287,10 @@ int main(int argc, char **argv)
entry->inst_offset = inst_offset; entry->inst_offset = inst_offset;
entry1 = entry->next; entry1 = entry->next;
if (entry1 && entry1->islabel && is_entry_point(entry1->string)) { 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) { while (((inst_offset+1) % 4) != 0) {
tmp_entry = calloc(sizeof(*tmp_entry), 1); tmp_entry = calloc(sizeof(*tmp_entry), 1);
tmp_entry->instruction.header.opcode = BRW_OPCODE_NOP;
entry->next = tmp_entry; entry->next = tmp_entry;
tmp_entry->next = entry1; tmp_entry->next = entry1;
entry = tmp_entry; entry = tmp_entry;