Mercurial > repos > blastem
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; |