summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/PPC/CodeGen.hs
Commit message (Collapse)AuthorAgeFilesLines
* Add support for byte endian swapping for Word 16/32/64.Austin Seipp2013-07-171-0/+1
| | | | | | | | | | | | | * Exposes bSwap{,16,32,64}# primops * Add a new machop: MO_BSwap * Use a Stg implementation (hs_bswap{16,32,64}) for other implementation in NCG. * Generate bswap in X86 NCG for 32 and 64 bits, and for 16 bits, bswap+shr instead of using xchg. * Generate llvm.bswap intrinsics in llvm codegen. Authored-by: Vincent Hanquez <tab@snarc.org> Signed-off-by: Austin Seipp <aseipp@pobox.com>
* Fix many ASSERT uses under Clang.Austin Seipp2013-06-181-1/+1
| | | | | | Clang doesn't like whitespace between macro and arguments. Signed-off-by: Austin Seipp <aseipp@pobox.com>
* Revert "Add support for byte endian swapping for Word 16/32/64."Simon Peyton Jones2013-06-111-1/+0
| | | | This reverts commit 1c5b0511a89488f5280523569d45ee61c0d09ffa.
* Add support for byte endian swapping for Word 16/32/64.Ian Lynagh2013-06-091-0/+1
| | | | | | | | | | | | * Exposes bSwap{,16,32,64}# primops * Add a new machops MO_BSwap * Use a Stg implementation (hs_bswap{16,32,64}) for other implementation in NCG. * Generate bswap in X86 NCG for 32 and 64 bits, and for 16 bits, bswap+shr instead of using xchg. * Generate llvm.bswap intrinsics in llvm codegen. Patch from Vincent Hanquez.
* Refactor cmmMakeDynamicReferenceIan Lynagh2013-05-131-4/+4
| | | | | It now has its own class, and the addImport function is defined in that class, rather than needing to be passed as an argument.
* Add prefetch primops.Geoffrey Mainland2013-02-011-0/+1
|
* Implement word2Float# and word2Double#Johan Tibell2012-12-131-0/+2
|
* Remove OldCmm, convert backends to consume new CmmSimon Marlow2012-11-121-32/+40
| | | | | | | | | | | | | | | | | | This removes the OldCmm data type and the CmmCvt pass that converts new Cmm to OldCmm. The backends (NCGs, LLVM and C) have all been converted to consume new Cmm. The main difference between the two data types is that conditional branches in new Cmm have both true/false successors, whereas in OldCmm the false case was a fallthrough. To generate slightly better code we occasionally need to invert a conditional to ensure that the branch-not-taken becomes a fallthrough; this was previously done in CmmCvt, and it is now done in CmmContFlowOpt. We could go further and use the Hoopl Block representation for native code, which would mean that we could use Hoopl's postorderDfs and analyses for native code, but for now I've left it as is, using the old ListGraph representation for native code.
* Attach global register liveness info to Cmm procedures.Geoffrey Mainland2012-10-301-2/+2
| | | | | | | All Cmm procedures now include the set of global registers that are live on procedure entry, i.e., the global registers used to pass arguments to the procedure. Only global registers that are use to pass arguments are included in this list.
* Some alpha renamingIan Lynagh2012-10-161-2/+2
| | | | | Mostly d -> g (matching DynFlag -> GeneralFlag). Also renamed if* to when*, matching the Haskell if/when names
* Move wORD_SIZE into platformConstantsIan Lynagh2012-09-161-5/+6
|
* Pass DynFlags down to wordWidthIan Lynagh2012-09-121-5/+5
|
* Pass DynFlags down to bWordIan Lynagh2012-09-121-17/+20
| | | | | | I've switched to passing DynFlags rather than Platform, as (a) it's simpler to not have to extract targetPlatform in so many places, and (b) it may be useful to have DynFlags around in future.
* Handle II16 size value in PowerPC code generator.Erik de Castro Lopo2012-09-081-2/+2
|
* Remove some CPP from nativeGen/PPC/Regs.hIan Lynagh2012-08-281-1/+2
|
* Move more code into codeGen/CodeGen/Platform.hsIan Lynagh2012-08-281-16/+19
| | | | | | | | HaskellMachRegs.h is no longer included in anything under compiler/ Also, includes/CodeGen.Platform.hs now includes "stg/MachRegs.h" rather than <stg/MachRegs.h> which means that we always get the file from the tree, rather than from the bootstrapping compiler.
* Fix for optimizer bug on linux-powerpc (#6156).Erik de Castro Lopo2012-08-231-4/+4
|
* Make the PPC globalRegMaybe more similar to the other platforms'Ian Lynagh2012-08-211-1/+1
|
* Make -fPIC a dynamic flagIan Lynagh2012-07-161-9/+10
| | | | | | Hopefully I've kept the logic the same, and we now generate warnings if the user does -fno-PIC but we ignore them (e.g. because they're on OS X amd64).
* Remove some more redundant Platform argumentsIan Lynagh2012-06-201-3/+2
|
* Remove lots of commented out 'in' keywordsIan Lynagh2012-06-131-5/+0
|
* Change how macros like ASSERT are definedIan Lynagh2012-06-051-0/+1
| | | | | By using Haskell's debugIsOn rather than CPP's "#ifdef DEBUG", we don't need to kludge things to keep the warning checker happy etc.
* Add a quotRemWord2 primopIan Lynagh2012-04-211-6/+7
| | | | | | | | It allows you to do (high, low) `quotRem` d provided high < d. Currently only has an inefficient fallback implementation.
* Fix the unregisterised build; fixes #5901Ian Lynagh2012-02-271-3/+3
|
* minor tweakGabor Greif2012-02-271-1/+1
|
* Add a 2-word-multiply operatorIan Lynagh2012-02-241-0/+1
| | | | Currently no NCGs support it
* Add a Word add-with-carry primopIan Lynagh2012-02-231-7/+6
| | | | No special-casing in any NCGs yet
* Add a primop for unsigned quotRem; part of #5598Ian Lynagh2012-02-171-0/+1
| | | | Only amd64 has an efficient implementation currently.
* Define a quotRem CallishMachOp; fixes #5598Ian Lynagh2012-02-141-4/+10
| | | | | This means we no longer do a division twice when we are using quotRem (on platforms on which the op is supported; currently only amd64).
* Track STG live register information for use in LLVMDavid Terei2012-01-091-1/+1
| | | | | | | | | We now carry around with CmmJump statements a list of the STG registers that are live at that jump site. This is used by the LLVM backend so it can avoid unnesecarily passing around dead registers, improving perfromance. This gives us the framework to finally fix trac #4308.
* Remove unused arg field of CmmReturnDavid Terei2012-01-051-1/+1
|
* Remove unused argument field on CmmJumpDavid Terei2012-01-051-1/+1
|
* fix warningSimon Marlow2012-01-041-6/+1
|
* Make getDynFlags* functions use HasDynFlags/getDynFlags tooIan Lynagh2011-12-191-9/+9
|
* Get rid of the "safety" field of CmmCall (OldCmm)Simon Marlow2011-11-291-1/+1
| | | | | This field was doing nothing. I think it originally appeared in a very old incarnation of the new code generator.
* Fixes for NetBSDIan Lynagh2011-11-251-0/+1
| | | | | Based on a patch from Arnaud Degroote <degroote@NetBSD.org> in trac #5480.
* Explicitly handle unsupported Cmm prim ops.David Terei2011-11-221-3/+4
|
* Revert "Remove OSUnknown"Ian Lynagh2011-10-191-0/+1
| | | | | | | This reverts commit f75f26cc4eed3c3cfc256ebfb9e77b8e82a766fc. On second thoughts, this does make sense, for unregisterised via-C OSes at least.
* Remove OSUnknownIan Lynagh2011-10-181-1/+0
| | | | | | It doesn't make sense. If platformOS is OSUnknown then we don't know the answer to any questions about the OS. So now if we don't recognise the OS we just fail, and the new OS will need to be added to the datatype.
* More CPP removal: pprDynamicLinkerAsmLabel in CLabelIan Lynagh2011-10-021-2/+3
| | | | And some knock-on changes
* Renaming onlySimon Peyton Jones2011-08-251-4/+4
| | | | | CmmTop -> CmmDecl CmmPgm -> CmmGroup
* Add popCnt# primopJohan Tibell2011-08-161-0/+3
|
* Small refactoringIan Lynagh2011-07-151-4/+3
|
* Remove more defaultTargetPlatform usesIan Lynagh2011-07-151-2/+3
|
* More work towards cross-compilationIan Lynagh2011-07-151-3/+4
| | | | | | | | | | | | There's now a variant of the Outputable class that knows what platform we're targetting: class PlatformOutputable a where pprPlatform :: Platform -> a -> SDoc pprPlatformPrec :: Platform -> Rational -> a -> SDoc and various instances have had to be converted to use that class, and we pass Platform around accordingly.
* Handle II8 Size value in PowerPC code generator.Erik de Castro Lopo2011-07-141-3/+3
|
* Refactoring: use a structured CmmStatics type rather than [CmmStatic]Max Bolingbroke2011-07-051-10/+9
| | | | | | | | | | | | | | | | | | I observed that the [CmmStatics] within CmmData uses the list in a very stylised way. The first item in the list is almost invariably a CmmDataLabel. Many parts of the compiler pattern match on this list and fail if this is not true. This patch makes the invariant explicit by introducing a structured type CmmStatics that holds the label and the list of remaining [CmmStatic]. There is one wrinkle: the x86 backend sometimes wants to output an alignment directive just before the label. However, this can be easily fixed up by parameterising the native codegen over the type of CmmStatics (though the GenCmmTop parameterisation) and using a pair (Alignment, CmmStatics) there instead. As a result, I think we will be able to remove CmmAlign and CmmDataLabel from the CmmStatic data type, thus nuking a lot of code and failing pattern matches. This change will come as part of my next patch.
* Remove type synonyms for CmmFormals, CmmActuals (and hinted versions).Edward Z. Yang2011-06-131-4/+4
| | | | Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
* Fix warnings in nativeGen/PPC/CodeGen.hsIan Lynagh2011-06-081-32/+29
|
* Remove platform CPP from nativeGen/PPC/CodeGen.hsIan Lynagh2011-06-081-116/+135
|