gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / sim / common / sim-n-endian.h
CommitLineData
b85e4829
AC
1/* The common simulator framework for GDB, the GNU Debugger.
2
b811d2c2 3 Copyright 2002-2020 Free Software Foundation, Inc.
b85e4829
AC
4
5 Contributed by Andrew Cagney and Red Hat.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
4744ac1b 11 the Free Software Foundation; either version 3 of the License, or
b85e4829
AC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
4744ac1b 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22
23#ifndef N
24#error "N must be #defined"
25#endif
26
27#include "symcat.h"
28
29/* NOTE: See end of file for #undef */
30#define unsigned_N XCONCAT2(unsigned_,N)
31#define endian_t2h_N XCONCAT2(endian_t2h_,N)
32#define endian_h2t_N XCONCAT2(endian_h2t_,N)
33#define _SWAP_N XCONCAT2(_SWAP_,N)
34#define swap_N XCONCAT2(swap_,N)
35#define endian_h2be_N XCONCAT2(endian_h2be_,N)
36#define endian_be2h_N XCONCAT2(endian_be2h_,N)
37#define endian_h2le_N XCONCAT2(endian_h2le_,N)
38#define endian_le2h_N XCONCAT2(endian_le2h_,N)
39#define offset_N XCONCAT2(offset_,N)
40
41/* TAGS: endian_t2h_1 endian_t2h_2 endian_t2h_4 endian_t2h_8 endian_t2h_16 */
42
43INLINE_SIM_ENDIAN\
44(unsigned_N)
45endian_t2h_N(unsigned_N raw_in)
46{
0cb8d851 47 if (CURRENT_TARGET_BYTE_ORDER == HOST_BYTE_ORDER) {
c906108c
SS
48 return raw_in;
49 }
50 else {
51 _SWAP_N(return,raw_in);
52 }
53}
54
55/* TAGS: endian_h2t_1 endian_h2t_2 endian_h2t_4 endian_h2t_8 endian_h2t_16 */
56
57INLINE_SIM_ENDIAN\
58(unsigned_N)
59endian_h2t_N(unsigned_N raw_in)
60{
0cb8d851 61 if (CURRENT_TARGET_BYTE_ORDER == HOST_BYTE_ORDER) {
c906108c
SS
62 return raw_in;
63 }
64 else {
65 _SWAP_N(return,raw_in);
66 }
67}
68
69/* TAGS: swap_1 swap_2 swap_4 swap_8 swap_16 */
70
71INLINE_SIM_ENDIAN\
72(unsigned_N)
73swap_N(unsigned_N raw_in)
74{
75 _SWAP_N(return,raw_in);
76}
77
78/* TAGS: endian_h2be_1 endian_h2be_2 endian_h2be_4 endian_h2be_8 endian_h2be_16 */
79
80INLINE_SIM_ENDIAN\
81(unsigned_N)
82endian_h2be_N(unsigned_N raw_in)
83{
0cb8d851 84 if (HOST_BYTE_ORDER == BFD_ENDIAN_BIG) {
c906108c
SS
85 return raw_in;
86 }
87 else {
88 _SWAP_N(return,raw_in);
89 }
90}
91
92/* TAGS: endian_be2h_1 endian_be2h_2 endian_be2h_4 endian_be2h_8 endian_be2h_16 */
93
94INLINE_SIM_ENDIAN\
95(unsigned_N)
96endian_be2h_N(unsigned_N raw_in)
97{
0cb8d851 98 if (HOST_BYTE_ORDER == BFD_ENDIAN_BIG) {
c906108c
SS
99 return raw_in;
100 }
101 else {
102 _SWAP_N(return,raw_in);
103 }
104}
105
106/* TAGS: endian_h2le_1 endian_h2le_2 endian_h2le_4 endian_h2le_8 endian_h2le_16 */
107
108INLINE_SIM_ENDIAN\
109(unsigned_N)
110endian_h2le_N(unsigned_N raw_in)
111{
0cb8d851 112 if (HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) {
c906108c
SS
113 return raw_in;
114 }
115 else {
116 _SWAP_N(return,raw_in);
117 }
118}
119
120/* TAGS: endian_le2h_1 endian_le2h_2 endian_le2h_4 endian_le2h_8 endian_le2h_16 */
121
122INLINE_SIM_ENDIAN\
123(unsigned_N)
124endian_le2h_N(unsigned_N raw_in)
125{
0cb8d851 126 if (HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE) {
c906108c
SS
127 return raw_in;
128 }
129 else {
130 _SWAP_N(return,raw_in);
131 }
132}
133
134/* TAGS: offset_1 offset_2 offset_4 offset_8 offset_16 */
135
136INLINE_SIM_ENDIAN\
137(void*)
138offset_N (unsigned_N *x,
139 unsigned sizeof_word,
140 unsigned word)
141{
142 char *in = (char*)x;
143 char *out;
144 unsigned offset = sizeof_word * word;
145 ASSERT (offset + sizeof_word <= sizeof(unsigned_N));
146 ASSERT (word < (sizeof (unsigned_N) / sizeof_word));
147 ASSERT ((sizeof (unsigned_N) % sizeof_word) == 0);
0cb8d851 148 if (HOST_BYTE_ORDER == BFD_ENDIAN_LITTLE)
c906108c
SS
149 {
150 out = in + sizeof (unsigned_N) - offset - sizeof_word;
151 }
152 else
153 {
154 out = in + offset;
155 }
156 return out;
157}
158
159
160/* NOTE: See start of file for #define */
161#undef unsigned_N
162#undef endian_t2h_N
163#undef endian_h2t_N
164#undef _SWAP_N
165#undef swap_N
166#undef endian_h2be_N
167#undef endian_be2h_N
168#undef endian_h2le_N
169#undef endian_le2h_N
170#undef offset_N
This page took 1.130758 seconds and 4 git commands to generate.