1 |
#ifndef CPU_HPPA_H |
2 |
#define CPU_HPPA_H |
3 |
|
4 |
/* |
5 |
* Copyright (C) 2005 Anders Gavare. All rights reserved. |
6 |
* |
7 |
* Redistribution and use in source and binary forms, with or without |
8 |
* modification, are permitted provided that the following conditions are met: |
9 |
* |
10 |
* 1. Redistributions of source code must retain the above copyright |
11 |
* notice, this list of conditions and the following disclaimer. |
12 |
* 2. Redistributions in binary form must reproduce the above copyright |
13 |
* notice, this list of conditions and the following disclaimer in the |
14 |
* documentation and/or other materials provided with the distribution. |
15 |
* 3. The name of the author may not be used to endorse or promote products |
16 |
* derived from this software without specific prior written permission. |
17 |
* |
18 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
19 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
20 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
21 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
22 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
23 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
24 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
25 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
26 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
27 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
28 |
* SUCH DAMAGE. |
29 |
* |
30 |
* |
31 |
* $Id: cpu_hppa.h,v 1.3 2005/03/09 17:13:37 debug Exp $ |
32 |
*/ |
33 |
|
34 |
#include "misc.h" |
35 |
|
36 |
#define N_HPPA_GRS 32 |
37 |
|
38 |
struct cpu_family; |
39 |
|
40 |
struct hppa_cpu { |
41 |
int bits; |
42 |
uint64_t pc_last; |
43 |
uint64_t gr[N_HPPA_GRS]; |
44 |
}; |
45 |
|
46 |
|
47 |
/* |
48 |
* Why on earth did they make it this way? Hm. See Appendix E in the HPPA 2.0 |
49 |
* specs for more info. This is insane. |
50 |
* |
51 |
* assemble_21(x) = x[20],x[9..19],x[5..6],x[0..4],x[7..8] |
52 |
* |
53 |
* Written in the normal way, where bit 0 is the lowest: |
54 |
* |
55 |
* asm_21(x) = x[0],x[11..1],x[15..14],x[20..16],x[13..12] |
56 |
* |
57 |
* That is: |
58 |
* |
59 |
* bits 0,11,10, 9, 8, 7, 6, 5, 4, 3, 2,1,15,14,20,19,18,17,16,13,12 |
60 |
* positions 20,19,18,17,16,15,14,13,12,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1, 0 |
61 |
* |
62 |
* YUCK! |
63 |
*/ |
64 |
#define assemble_21(x) ( \ |
65 |
(((x) & 1) << 20) | \ |
66 |
((((x) >> 1) & 0x7ff) << 9) | \ |
67 |
((((x) >> 14) & 3) << 7) | \ |
68 |
((((x) >> 16) & 0x1f) << 2) | \ |
69 |
(((x) >> 12) & 3) ) |
70 |
|
71 |
|
72 |
/* cpu_hppa.c: */ |
73 |
int hppa_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr, |
74 |
unsigned char *data, size_t len, int writeflag, int cache_flags); |
75 |
int hppa_cpu_family_init(struct cpu_family *); |
76 |
|
77 |
|
78 |
#endif /* CPU_HPPA_H */ |