1 /* If we're being compiled as a .c file, rather than being included in
2 d10v-sim.h, then ENDIAN_INLINE won't be defined yet. */
4 /* This must come before any other includes. */
8 #define NO_ENDIAN_INLINE
15 ENDIAN_INLINE
uint16_t
16 get_word (const uint8_t *x
)
18 return ((uint16_t)x
[0]<<8) + x
[1];
21 ENDIAN_INLINE
uint32_t
22 get_longword (const uint8_t *x
)
24 return ((uint32_t)x
[0]<<24) + ((uint32_t)x
[1]<<16) + ((uint32_t)x
[2]<<8) + ((uint32_t)x
[3]);
28 get_longlong (const uint8_t *x
)
30 uint32_t top
= get_longword (x
);
31 uint32_t bottom
= get_longword (x
+4);
32 return (((int64_t)top
)<<32) | (int64_t)bottom
;
36 write_word (uint8_t *addr
, uint16_t data
)
38 addr
[0] = (data
>> 8) & 0xff;
39 addr
[1] = data
& 0xff;
43 write_longword (uint8_t *addr
, uint32_t data
)
45 addr
[0] = (data
>> 24) & 0xff;
46 addr
[1] = (data
>> 16) & 0xff;
47 addr
[2] = (data
>> 8) & 0xff;
48 addr
[3] = data
& 0xff;
52 write_longlong (uint8_t *addr
, int64_t data
)
54 write_longword (addr
, (uint32_t)(data
>> 32));
55 write_longword (addr
+4, (uint32_t)data
);