Make read/write memory functions inlined
[platform/upstream/binutils.git] / sim / d10v / endian.c
1 #ifndef ENDIAN_INLINE
2 #define NO_ENDIAN_INLINE
3 #include "d10v_sim.h"
4 #define ENDIAN_INLINE
5 #endif
6
7 ENDIAN_INLINE uint32
8 get_longword (x)
9       uint8 *x;
10 {
11   return ((uint32)x[0]<<24) + ((uint32)x[1]<<16) + ((uint32)x[2]<<8) + ((uint32)x[3]);
12 }
13
14 ENDIAN_INLINE int64
15 get_longlong (x)
16       uint8 *x;
17 {
18   uint32 top = ((uint32)x[0]<<24) + ((uint32)x[1]<<16) + ((uint32)x[2]<<8) + ((uint32)x[3]);
19   uint32 bottom = ((uint32)x[4]<<24) + ((uint32)x[5]<<16) + ((uint32)x[6]<<8) + ((uint32)x[7]);
20   return (((int64)top)<<32) | (int64)bottom;
21 }
22
23 ENDIAN_INLINE uint16
24 get_word (x)
25       uint8 *x;
26 {
27   return ((uint16)x[0]<<8) + x[1];
28 }
29
30 ENDIAN_INLINE void
31 write_word (addr, data)
32      uint8 *addr;
33      uint16 data;
34 {
35   addr[0] = (data >> 8) & 0xff;
36   addr[1] = data & 0xff;
37 }
38
39 ENDIAN_INLINE void
40 write_longword (addr, data)
41      uint8 *addr;
42      uint32 data;
43 {
44   addr[0] = (data >> 24) & 0xff;
45   addr[1] = (data >> 16) & 0xff;
46   addr[2] = (data >> 8) & 0xff;
47   addr[3] = data & 0xff;
48 }
49
50 ENDIAN_INLINE void
51 write_longlong (addr, data)
52      uint8 *addr;
53      int64 data;
54 {
55   addr[0] = data >> 56;
56   addr[1] = (data >> 48) & 0xff;
57   addr[2] = (data >> 40) & 0xff;
58   addr[3] = (data >> 32) & 0xff;
59   addr[4] = (data >> 24) & 0xff;
60   addr[5] = (data >> 16) & 0xff;
61   addr[6] = (data >> 8) & 0xff;
62   addr[7] = data & 0xff;
63 }