Message ID | 54577B27.5010109@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On Mon, Nov 03, 2014 at 10:55:03AM -0200, Adhemerval Zanella wrote: > +#include <endian.h> > + > +#if __BYTE_ORDER == __LITTLE_ENDIAN > +#define MTVSRD_V1_R4 .byte 0x66,0x01,0x24,0x7c /* mtvsrd v1,r4 */ > +#else > +#define MTVSRD_V1_R4 .byte 0x7c,0x24,0x01,0x66 > +#endif Why not just #define MTVSRD_V1_R4 .long 0x7c240166 (which works in any endianness)? Segher
On 04-11-2014 01:14, Segher Boessenkool wrote: > On Mon, Nov 03, 2014 at 10:55:03AM -0200, Adhemerval Zanella wrote: >> +#include <endian.h> >> + >> +#if __BYTE_ORDER == __LITTLE_ENDIAN >> +#define MTVSRD_V1_R4 .byte 0x66,0x01,0x24,0x7c /* mtvsrd v1,r4 */ >> +#else >> +#define MTVSRD_V1_R4 .byte 0x7c,0x24,0x01,0x66 >> +#endif > Why not just > > #define MTVSRD_V1_R4 .long 0x7c240166 > > (which works in any endianness)? I was not aware '.long' work in any endianess. I will change it, thanks.
diff --git a/sysdeps/powerpc/powerpc64/power8/memset.S b/sysdeps/powerpc/powerpc64/power8/memset.S index 191a4df..cebcbdf 100644 --- a/sysdeps/powerpc/powerpc64/power8/memset.S +++ b/sysdeps/powerpc/powerpc64/power8/memset.S @@ -17,6 +17,13 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <endian.h> + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define MTVSRD_V1_R4 .byte 0x66,0x01,0x24,0x7c /* mtvsrd v1,r4 */ +#else +#define MTVSRD_V1_R4 .byte 0x7c,0x24,0x01,0x66 +#endif /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); Returns 's'. */ @@ -142,7 +149,7 @@ L(tail_bytes): vector instruction to achieve best throughput. */ L(huge_vector): /* Replicate set byte to quadword in VMX register. */ - mtvsrd v1,r4 + MTVSRD_V1_R4 xxpermdi 32,v0,v1,0 vspltb v2,v0,15