@@ -1615,9 +1615,29 @@ pack_inner(const char *inptr,
16151615 #else
16161616 npy_uint64 arr [4 ] = {bb [0 ], bb [1 ], bb [2 ], bb [3 ]};
16171617 #endif
1618+
1619+ #if NPY_BYTE_ORDER == NPY_BIG_ENDIAN
1620+ #if NPY_SIMD_WIDTH == 16
1621+ arr [0 ] = npy_bswap8 (arr [0 ]);
1622+ #elif NPY_SIMD_WIDTH == 32
1623+ arr [0 ] = npy_bswap8 (arr [0 ]);
1624+ arr [1 ] = npy_bswap8 (arr [1 ]);
1625+ #else
1626+ arr [0 ] = npy_bswap8 (arr [0 ]);
1627+ arr [1 ] = npy_bswap8 (arr [1 ]);
1628+ arr [2 ] = npy_bswap8 (arr [2 ]);
1629+ arr [3 ] = npy_bswap8 (arr [3 ]);
1630+ #endif
1631+ #endif
16181632 memcpy (outptr , arr , sizeof (arr ));
16191633 outptr += vstepx4 ;
16201634 } else {
1635+ #if NPY_BYTE_ORDER == NPY_BIG_ENDIAN
1636+ bb [0 ] = npy_bswap8 (bb [0 ]);
1637+ bb [1 ] = npy_bswap8 (bb [1 ]);
1638+ bb [2 ] = npy_bswap8 (bb [2 ]);
1639+ bb [3 ] = npy_bswap8 (bb [3 ]);
1640+ #endif
16211641 for (int i = 0 ; i < 4 ; i ++ ) {
16221642 for (int j = 0 ; j < vstep ; j ++ ) {
16231643 memcpy (outptr , (char * )& bb [i ] + j , 1 );
@@ -1632,6 +1652,11 @@ pack_inner(const char *inptr,
16321652 va = npyv_rev64_u8 (va );
16331653 }
16341654 npy_uint64 bb = npyv_tobits_b8 (npyv_cmpneq_u8 (va , v_zero ));
1655+
1656+ #if NPY_BYTE_ORDER == NPY_BIG_ENDIAN
1657+ bb = npy_bswap8 (bb );
1658+ #endif
1659+
16351660 for (int i = 0 ; i < vstep ; ++ i ) {
16361661 memcpy (outptr , (char * )& bb + i , 1 );
16371662 outptr += out_stride ;
0 commit comments