Skip to content

Commit 96c36cb

Browse files
committed
Fix big-endian archs
- Add missing include "MachDeps.h" - Use narrow32Word# to ensure correct result after byteSwap32# on Big-Endian arch
1 parent b1de81f commit 96c36cb

File tree

5 files changed

+22
-14
lines changed

5 files changed

+22
-14
lines changed

unicode-data-names/lib/Unicode/Internal/Char/UnicodeData/DerivedName.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ name (C# c#) = getName 0# 149185#
5151
indexInt32OffAddr'# k# =
5252
#ifdef WORDS_BIGENDIAN
5353
#if MIN_VERSION_base(4,16,0)
54-
word2Int# (byteSwap32# (word32ToWord# (indexWord32OffAddr# offsets# k#)))
54+
word2Int# (narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# offsets# k#))))
5555
#else
56-
word2Int# (byteSwap32# (indexWord32OffAddr# offsets# k#))
56+
word2Int# (narrow32Word# (byteSwap32# (indexWord32OffAddr# offsets# k#)))
5757
#endif
5858
#elif MIN_VERSION_base(4,16,0)
5959
int32ToInt# (indexInt32OffAddr# offsets# k#)

unicode-data-scripts/lib/Unicode/Char/General/Scripts.hs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ module Unicode.Char.General.Scripts
2020
)
2121
where
2222

23+
#include "MachDeps.h"
24+
2325
import Data.Char (chr)
2426
import Data.List.NonEmpty (NonEmpty)
2527
import GHC.Exts
@@ -30,7 +32,7 @@ import GHC.Exts
3032
import GHC.Exts (word32ToWord#)
3133
#endif
3234
#ifdef WORDS_BIGENDIAN
33-
import GHC.Exts (byteSwap32#)
35+
import GHC.Exts (byteSwap32#, narrow32Word#)
3436
#endif
3537

3638
import qualified Unicode.Internal.Char.Scripts as S
@@ -62,9 +64,9 @@ scriptDefinition = unpack . S.scriptDefinition
6264
getRawCodePoint k# =
6365
#ifdef WORDS_BIGENDIAN
6466
#if MIN_VERSION_base(4,16,0)
65-
byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#));
67+
narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#)));
6668
#else
67-
byteSwap32# (indexWord32OffAddr# addr# k#);
69+
narrow32Word# (byteSwap32# (indexWord32OffAddr# addr# k#));
6870
#endif
6971
#elif MIN_VERSION_base(4,16,0)
7072
word32ToWord# (indexWord32OffAddr# addr# k#);

unicode-data-scripts/test/Unicode/Char/General/ScriptsSpec.hs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ module Unicode.Char.General.ScriptsSpec
44
( spec
55
) where
66

7+
#include "MachDeps.h"
8+
79
import Data.Foldable (traverse_)
810
import Test.Hspec
911
import qualified Unicode.Char.General.Scripts as UScripts
@@ -19,7 +21,7 @@ import GHC.Exts
1921
import GHC.Exts (word32ToWord#)
2022
#endif
2123
#ifdef WORDS_BIGENDIAN
22-
import GHC.Exts (byteSwap32#)
24+
import GHC.Exts (byteSwap32#, narrow32Word#)
2325
#endif
2426

2527
{- [NOTE]
@@ -177,9 +179,9 @@ inScript s (C# c#) = check (S.scriptDefinition s)
177179
getRawCodePoint k# =
178180
#ifdef WORDS_BIGENDIAN
179181
#if MIN_VERSION_base(4,16,0)
180-
byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#));
182+
narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#)));
181183
#else
182-
byteSwap32# (indexWord32OffAddr# addr# k#);
184+
narrow32Word# (byteSwap32# (indexWord32OffAddr# addr# k#));
183185
#endif
184186
#elif MIN_VERSION_base(4,16,0)
185187
word32ToWord# (indexWord32OffAddr# addr# k#);

unicode-data/exe/Parser/Text.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ genBlocksModule moduleName = done <$> Fold.foldl' step initial
318318
, "(Block(..), BlockDefinition(..), block, blockDefinition)"
319319
, "where"
320320
, ""
321+
, "#include \"MachDeps.h\""
322+
, ""
321323
, "import Data.Ix (Ix)"
322324
, "import GHC.Exts"
323325
, ""
@@ -381,9 +383,9 @@ genBlocksModule moduleName = done <$> Fold.foldl' step initial
381383
, " getRawCodePoint# k# ="
382384
, "#ifdef WORDS_BIGENDIAN"
383385
, "#if MIN_VERSION_base(4,16,0)"
384-
, " byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#))"
386+
, " narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# ranges# k#)))"
385387
, "#else"
386-
, " byteSwap32# (indexWord32OffAddr# ranges# k#)"
388+
, " narrow32Word# (byteSwap32# (indexWord32OffAddr# ranges# k#))"
387389
, "#endif"
388390
, "#elif MIN_VERSION_base(4,16,0)"
389391
, " word32ToWord# (indexWord32OffAddr# ranges# k#)"
@@ -1279,9 +1281,9 @@ genNamesModule moduleName =
12791281
, " indexInt32OffAddr'# k# ="
12801282
, "#ifdef WORDS_BIGENDIAN"
12811283
, "#if MIN_VERSION_base(4,16,0)"
1282-
, " word2Int# (byteSwap32# (word32ToWord# (indexWord32OffAddr# offsets# k#)))"
1284+
, " word2Int# (narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# offsets# k#))))"
12831285
, "#else"
1284-
, " word2Int# (byteSwap32# (indexWord32OffAddr# offsets# k#))"
1286+
, " word2Int# (narrow32Word# (byteSwap32# (indexWord32OffAddr# offsets# k#)))"
12851287
, "#endif"
12861288
, "#elif MIN_VERSION_base(4,16,0)"
12871289
, " int32ToInt# (indexInt32OffAddr# offsets# k#)"

unicode-data/lib/Unicode/Internal/Char/Blocks.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module Unicode.Internal.Char.Blocks
1313
(Block(..), BlockDefinition(..), block, blockDefinition)
1414
where
1515

16+
#include "MachDeps.h"
17+
1618
import Data.Ix (Ix)
1719
import GHC.Exts
1820

@@ -729,9 +731,9 @@ block (C# c#) = getBlock 0# 326#
729731
getRawCodePoint# k# =
730732
#ifdef WORDS_BIGENDIAN
731733
#if MIN_VERSION_base(4,16,0)
732-
byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#))
734+
narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# ranges# k#)))
733735
#else
734-
byteSwap32# (indexWord32OffAddr# ranges# k#)
736+
narrow32Word# (byteSwap32# (indexWord32OffAddr# ranges# k#))
735737
#endif
736738
#elif MIN_VERSION_base(4,16,0)
737739
word32ToWord# (indexWord32OffAddr# ranges# k#)

0 commit comments

Comments
 (0)