Add Int8# and Word8#
authorMichal Terepeta <michal.terepeta@gmail.com>
Fri, 2 Nov 2018 18:27:03 +0000 (14:27 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 2 Nov 2018 21:15:01 +0000 (17:15 -0400)
commit2c959a1894311e59cd2fd469c1967491c1e488f3
treedc396ec23115f4b6a10b8295bfa94b865ff02efb
parent6bb8aaa3b4fcebf8f0de2f81f00dcc20b857c4f5
Add Int8# and Word8#

This is the first step of implementing:
https://github.com/ghc-proposals/ghc-proposals/pull/74

The main highlights/changes:

    primops.txt.pp gets two new sections for two new primitive types for
    signed and unsigned 8-bit integers (Int8# and Word8 respectively) along
    with basic arithmetic and comparison operations. PrimRep/RuntimeRep get
    two new constructors for them. All of the primops translate into the
    existing MachOPs.

    For CmmCalls the codegen will now zero-extend the values at call
    site (so that they can be moved to the right register) and then truncate
    them back their original width.

    x86 native codegen needed some updates, since it wasn't able to deal
    with the new widths, but all the changes are quite localized. LLVM
    backend seems to just work.

This is the second attempt at merging this, after the first attempt in
D4475 had to be backed out due to regressions on i386.

Bumps binary submodule.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: ./validate (on both x86-{32,64})

Reviewers: bgamari, hvr, goldfire, simonmar

Subscribers: rwbarton, carter

Differential Revision: https://phabricator.haskell.org/D5258
44 files changed:
compiler/cmm/CmmExpr.hs
compiler/cmm/CmmMachOp.hs
compiler/cmm/CmmUtils.hs
compiler/cmm/MkGraph.hs
compiler/cmm/PprC.hs
compiler/codeGen/StgCmmArgRep.hs
compiler/codeGen/StgCmmPrim.hs
compiler/ghci/ByteCodeGen.hs
compiler/llvmGen/LlvmCodeGen/CodeGen.hs
compiler/nativeGen/X86/CodeGen.hs
compiler/nativeGen/X86/Instr.hs
compiler/nativeGen/X86/Ppr.hs
compiler/prelude/PrelNames.hs
compiler/prelude/TysPrim.hs
compiler/prelude/TysWiredIn.hs
compiler/prelude/TysWiredIn.hs-boot
compiler/prelude/primops.txt.pp
compiler/simplStg/RepType.hs
compiler/typecheck/TcGenDeriv.hs
compiler/types/TyCon.hs
compiler/utils/Binary.hs
includes/CodeGen.Platform.hs
libraries/base/Data/Typeable/Internal.hs
libraries/binary
libraries/ghc-prim/GHC/Types.hs
testsuite/tests/ffi/should_run/PrimFFIInt8.hs [new file with mode: 0644]
testsuite/tests/ffi/should_run/PrimFFIInt8.stdout [new file with mode: 0644]
testsuite/tests/ffi/should_run/PrimFFIInt8_c.c [new file with mode: 0644]
testsuite/tests/ffi/should_run/PrimFFIWord8.hs [new file with mode: 0644]
testsuite/tests/ffi/should_run/PrimFFIWord8.stdout [new file with mode: 0644]
testsuite/tests/ffi/should_run/PrimFFIWord8_c.c [new file with mode: 0644]
testsuite/tests/ffi/should_run/all.T
testsuite/tests/primops/should_run/ArithInt8.hs [new file with mode: 0644]
testsuite/tests/primops/should_run/ArithInt8.stdout [new file with mode: 0644]
testsuite/tests/primops/should_run/ArithWord8.hs [new file with mode: 0644]
testsuite/tests/primops/should_run/ArithWord8.stdout [new file with mode: 0644]
testsuite/tests/primops/should_run/CmpInt8.hs [new file with mode: 0644]
testsuite/tests/primops/should_run/CmpInt8.stdout [new file with mode: 0644]
testsuite/tests/primops/should_run/CmpWord8.hs [new file with mode: 0644]
testsuite/tests/primops/should_run/CmpWord8.stdout [new file with mode: 0644]
testsuite/tests/primops/should_run/ShowPrim.hs [new file with mode: 0644]
testsuite/tests/primops/should_run/ShowPrim.stdout [new file with mode: 0644]
testsuite/tests/primops/should_run/all.T
utils/genprimopcode/Main.hs