From: Michael Meissner Date: Wed, 16 Oct 1996 22:16:21 +0000 (+0000) Subject: Make read/write memory functions inlined X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d6fe5ca5689638a23556073ca9207e8c706a6ef8;p=binutils-gdb.git Make read/write memory functions inlined --- diff --git a/sim/d10v/d10v_sim.h b/sim/d10v/d10v_sim.h index 038f23a918f..3ecdc7adbd4 100644 --- a/sim/d10v/d10v_sim.h +++ b/sim/d10v/d10v_sim.h @@ -167,12 +167,12 @@ extern struct simops Simops[]; #undef ENDIAN_INLINE #else -uint32 get_longword PARAMS ((uint8 *)); -uint16 get_word PARAMS ((uint8 *)); -int64 get_longlong PARAMS ((uint8 *)); -void write_word PARAMS ((uint8 *addr, uint16 data)); -void write_longword PARAMS ((uint8 *addr, uint32 data)); -void write_longlong PARAMS ((uint8 *addr, int64 data)); +extern uint32 get_longword PARAMS ((uint8 *)); +extern uint16 get_word PARAMS ((uint8 *)); +extern int64 get_longlong PARAMS ((uint8 *)); +extern void write_word PARAMS ((uint8 *addr, uint16 data)); +extern void write_longword PARAMS ((uint8 *addr, uint32 data)); +extern void write_longlong PARAMS ((uint8 *addr, int64 data)); #endif #define SW(addr,data) write_word((long)(addr)+State.imem,data) diff --git a/sim/d10v/endian.c b/sim/d10v/endian.c new file mode 100644 index 00000000000..929edc9317c --- /dev/null +++ b/sim/d10v/endian.c @@ -0,0 +1,63 @@ +#ifndef ENDIAN_INLINE +#define NO_ENDIAN_INLINE +#include "d10v_sim.h" +#define ENDIAN_INLINE +#endif + +ENDIAN_INLINE uint32 +get_longword (x) + uint8 *x; +{ + return ((uint32)x[0]<<24) + ((uint32)x[1]<<16) + ((uint32)x[2]<<8) + ((uint32)x[3]); +} + +ENDIAN_INLINE int64 +get_longlong (x) + uint8 *x; +{ + uint32 top = ((uint32)x[0]<<24) + ((uint32)x[1]<<16) + ((uint32)x[2]<<8) + ((uint32)x[3]); + uint32 bottom = ((uint32)x[4]<<24) + ((uint32)x[5]<<16) + ((uint32)x[6]<<8) + ((uint32)x[7]); + return (((int64)top)<<32) | (int64)bottom; +} + +ENDIAN_INLINE uint16 +get_word (x) + uint8 *x; +{ + return ((uint16)x[0]<<8) + x[1]; +} + +ENDIAN_INLINE void +write_word (addr, data) + uint8 *addr; + uint16 data; +{ + addr[0] = (data >> 8) & 0xff; + addr[1] = data & 0xff; +} + +ENDIAN_INLINE void +write_longword (addr, data) + uint8 *addr; + uint32 data; +{ + addr[0] = (data >> 24) & 0xff; + addr[1] = (data >> 16) & 0xff; + addr[2] = (data >> 8) & 0xff; + addr[3] = data & 0xff; +} + +ENDIAN_INLINE void +write_longlong (addr, data) + uint8 *addr; + int64 data; +{ + addr[0] = data >> 56; + addr[1] = (data >> 48) & 0xff; + addr[2] = (data >> 40) & 0xff; + addr[3] = (data >> 32) & 0xff; + addr[4] = (data >> 24) & 0xff; + addr[5] = (data >> 16) & 0xff; + addr[6] = (data >> 8) & 0xff; + addr[7] = data & 0xff; +} diff --git a/sim/d10v/interp.c b/sim/d10v/interp.c index 11a18c480df..d06b86bb84c 100644 --- a/sim/d10v/interp.c +++ b/sim/d10v/interp.c @@ -65,69 +65,6 @@ lookup_hash (ins, size) return (h); } -uint32 -get_longword (x) - uint8 *x; -{ - uint8 *a = x; - return (a[0]<<24) + (a[1]<<16) + (a[2]<<8) + (a[3]); -} - -int64 -get_longlong (x) - uint8 *x; -{ - uint8 *a = x; - return ((int64)a[0]<<56) + ((int64)a[1]<<48) + ((int64)a[2]<<40) + ((int64)a[3]<<32) + - ((int64)a[4]<< 24) + ((int64)a[5]<<16) + ((int64)a[6]<<8) + (int64)a[7]; -} - -uint16 -get_word (x) - uint8 *x; -{ - uint8 *a = x; - return ((uint16)a[0]<<8) + a[1]; -} - - -void -write_word (addr, data) - uint8 *addr; - uint16 data; -{ - uint8 *a = addr; - a[0] = data >> 8; - a[1] = data & 0xff; -} - -void -write_longword (addr, data) - uint8 *addr; - uint32 data; -{ - addr[0] = (data >> 24) & 0xff; - addr[1] = (data >> 16) & 0xff; - addr[2] = (data >> 8) & 0xff; - addr[3] = data & 0xff; -} - -void -write_longlong (addr, data) - uint8 *addr; - int64 data; -{ - uint8 *a = addr; - a[0] = data >> 56; - a[1] = (data >> 48) & 0xff; - a[2] = (data >> 40) & 0xff; - a[3] = (data >> 32) & 0xff; - a[4] = (data >> 24) & 0xff; - a[5] = (data >> 16) & 0xff; - a[6] = (data >> 8) & 0xff; - a[7] = data & 0xff; -} - static void get_operands (struct simops *s, uint32 ins) {