Mercurial > repos > blastem
comparison backend.c @ 557:acec5464fa1e
Rename x86_backend.h and x86_backend.c to backend.h and backend.c respectively
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 24 Feb 2014 00:50:15 -0800 |
parents | x86_backend.c@140af5509ce7 |
children | dc9f178085a0 |
comparison
equal
deleted
inserted
replaced
556:34dfa9b24c7b | 557:acec5464fa1e |
---|---|
1 /* | |
2 Copyright 2013 Michael Pavone | |
3 This file is part of BlastEm. | |
4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. | |
5 */ | |
6 #include "backend.h" | |
7 #include <stdlib.h> | |
8 | |
9 deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest) | |
10 { | |
11 deferred_addr * new_head = malloc(sizeof(deferred_addr)); | |
12 new_head->next = old_head; | |
13 new_head->address = address & 0xFFFFFF; | |
14 new_head->dest = dest; | |
15 return new_head; | |
16 } | |
17 | |
18 void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to) | |
19 { | |
20 for(deferred_addr *cur = *head_ptr; cur && cur != remove_to; cur = *head_ptr) | |
21 { | |
22 *head_ptr = cur->next; | |
23 free(cur); | |
24 } | |
25 } | |
26 | |
27 void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native) | |
28 { | |
29 deferred_addr * cur = *head_ptr; | |
30 deferred_addr **last_next = head_ptr; | |
31 while(cur) | |
32 { | |
33 uint8_t * native = get_native(context, cur->address);//get_native_address(opts->native_code_map, cur->address); | |
34 if (native) { | |
35 int32_t disp = native - (cur->dest + 4); | |
36 uint8_t * out = cur->dest; | |
37 *(out++) = disp; | |
38 disp >>= 8; | |
39 *(out++) = disp; | |
40 disp >>= 8; | |
41 *(out++) = disp; | |
42 disp >>= 8; | |
43 *out = disp; | |
44 *last_next = cur->next; | |
45 free(cur); | |
46 cur = *last_next; | |
47 } else { | |
48 last_next = &(cur->next); | |
49 cur = cur->next; | |
50 } | |
51 } | |
52 } | |
53 |