X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fcgen-ops.h;h=7ff1b4db26a48de44029e27f3c05ebea67d0777b;hb=8b8c7c9f49992750f66f81b4601d593a3858d98c;hp=8bfe1675a98046c9e2452f8c9946bf35bec127ed;hpb=c6f38234a77e5c881e73d4da05001d2e27a60e8f;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/cgen-ops.h b/sim/common/cgen-ops.h index 8bfe1675a9..7ff1b4db26 100644 --- a/sim/common/cgen-ops.h +++ b/sim/common/cgen-ops.h @@ -1,6 +1,5 @@ /* Semantics ops support for CGEN-based simulators. - Copyright (C) 1996, 1997, 1998, 1999, 2002, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 1996-2016 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU Simulators. @@ -25,9 +24,10 @@ along with this program. If not, see . #include +/* TODO: This should get moved into sim-inline.h. */ #if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE) #define SEMOPS_DEFINE_INLINE -#define SEMOPS_INLINE extern inline +#define SEMOPS_INLINE EXTERN_INLINE #else #define SEMOPS_INLINE #endif @@ -404,7 +404,10 @@ SUBWORDXFSI (XF in, int word) /* Note: typedef struct { SI parts[3]; } XF; */ union { XF in; SI out[3]; } x; x.in = in; - return x.out[word]; + if (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) + return x.out[word]; + else + return x.out[2 - word]; } SEMOPS_INLINE SI @@ -413,23 +416,23 @@ SUBWORDTFSI (TF in, int word) /* Note: typedef struct { SI parts[4]; } TF; */ union { TF in; SI out[4]; } x; x.in = in; - return x.out[word]; + if (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) + return x.out[word]; + else + return x.out[3 - word]; } SEMOPS_INLINE DI JOINSIDI (SI x0, SI x1) { - if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) - return MAKEDI (x0, x1); - else - return MAKEDI (x1, x0); + return MAKEDI (x0, x1); } SEMOPS_INLINE DF JOINSIDF (SI x0, SI x1) { union { SI in[2]; DF out; } x; - if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) + if (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) x.in[0] = x0, x.in[1] = x1; else x.in[1] = x0, x.in[0] = x1; @@ -440,7 +443,7 @@ SEMOPS_INLINE XF JOINSIXF (SI x0, SI x1, SI x2) { union { SI in[3]; XF out; } x; - if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) + if (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) x.in[0] = x0, x.in[1] = x1, x.in[2] = x2; else x.in[2] = x0, x.in[1] = x1, x.in[0] = x2; @@ -451,7 +454,7 @@ SEMOPS_INLINE TF JOINSITF (SI x0, SI x1, SI x2, SI x3) { union { SI in[4]; TF out; } x; - if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN) + if (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) x.in[0] = x0, x.in[1] = x1, x.in[2] = x2, x.in[3] = x3; else x.in[3] = x0, x.in[2] = x1, x.in[1] = x2, x.in[0] = x3;