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