comparison dis.c @ 635:6992a1b07714

Fix logic for automatic label generation.
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Oct 2014 19:02:47 -0700
parents 4a6ec64acd79
children e263e1ac6038
comparison
equal deleted inserted replaced
634:4a6ec64acd79 635:6992a1b07714
9 #include <string.h> 9 #include <string.h>
10 #include "vos_program_module.h" 10 #include "vos_program_module.h"
11 #include "tern.h" 11 #include "tern.h"
12 12
13 uint8_t visited[(16*1024*1024)/16]; 13 uint8_t visited[(16*1024*1024)/16];
14 uint8_t label[(16*1024*1024)/8]; 14 uint16_t label[(16*1024*1024)/8];
15 15
16 void visit(uint32_t address) 16 void visit(uint32_t address)
17 { 17 {
18 address &= 0xFFFFFF; 18 address &= 0xFFFFFF;
19 visited[address/16] |= 1 << ((address / 2) % 8); 19 visited[address/16] |= 1 << ((address / 2) % 8);
21 21
22 void reference(uint32_t address) 22 void reference(uint32_t address)
23 { 23 {
24 address &= 0xFFFFFF; 24 address &= 0xFFFFFF;
25 //printf("referenced: %X\n", address); 25 //printf("referenced: %X\n", address);
26 label[address/16] |= 1 << (address % 8); 26 label[address/16] |= 1 << (address % 16);
27 } 27 }
28 28
29 uint8_t is_visited(uint32_t address) 29 uint8_t is_visited(uint32_t address)
30 { 30 {
31 address &= 0xFFFFFF; 31 address &= 0xFFFFFF;
32 return visited[address/16] & (1 << ((address / 2) % 8)); 32 return visited[address/16] & (1 << ((address / 2) % 8));
33 } 33 }
34 34
35 uint8_t is_label(uint32_t address) 35 uint16_t is_label(uint32_t address)
36 { 36 {
37 address &= 0xFFFFFF; 37 address &= 0xFFFFFF;
38 return label[address/16] & (1 << (address % 8)); 38 return label[address/16] & (1 << (address % 16));
39 } 39 }
40 40
41 typedef struct { 41 typedef struct {
42 uint32_t num_labels; 42 uint32_t num_labels;
43 uint32_t storage; 43 uint32_t storage;