Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Dec 2016 17:19:05 +0100
From:      Roman Divacky <rdivacky@vlakno.cz>
To:        Mark Millard <markmi@dsl-only.net>
Cc:        Justin Hibbits <chmeeedalf@gmail.com>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>
Subject:   Re: clang 3.9.0 buildkernel on old powerpc64's vs. trying to build hwpmc_e500.o and the like. . .
Message-ID:  <20161205161904.GA7889@vlakno.cz>
In-Reply-To: <300CB7A2-34BB-407F-B2E9-D263B119A989@dsl-only.net>
References:  <300CB7A2-34BB-407F-B2E9-D263B119A989@dsl-only.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Can you try this patch?

Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
===================================================================
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td	(revision 288675)
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td	(working copy)
@@ -2373,6 +2373,12 @@
 def MFTB : XFXForm_1<31, 371, (outs gprc:$RT), (ins i32imm:$SPR),
                      "mftb $RT, $SPR", IIC_SprMFTB>;
 
+def MFPMR : XFXForm_1<31, 334, (outs gprc:$RT), (ins i32imm:$PMRN),
+                     "mfpmr $RT, $PMRN", IIC_IntGeneral>;
+
+def MTPMR : XFXForm_1<31, 462, (outs), (ins i32imm:$PMRN, gprc:$RS),
+                     "mtpmr $PMRN, $RS", IIC_IntGeneral>;
+
 // A pseudo-instruction used to implement the read of the 64-bit cycle counter
 // on a 32-bit target.
 let hasSideEffects = 1, usesCustomInserter = 1 in


On Sat, Dec 03, 2016 at 08:35:50PM -0800, Mark Millard wrote:
> [Note: At present I can buildworld using WITH_LIB32= on
> powerpc64 for TARGET_ARCH=powerpc64 via clang 3.9.0 from a
> minor variant of head -r309179 . That does not work for
> amd64 cross compiling to powerpc64 due to assembler
> notation rejections.]
> 
> When I attempt to buildkernel (with WERROR= ) via FreeBSD's
> clang 3.9.0 I get the following sorts of error
> reports, *even building on powerpc64* :
> 
> --- hwpmc_e500.o ---
> /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:475:19: error: unrecognized instruction mnemonic
>         uint32_t pmgc0 = mfpmr(PMR_PMGC0);
>                          ^
> ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr'
>           __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg));       \
>                            ^
> <inline asm>:1:2: note: instantiated into assembly here
>         mfpmr 3,400
>         ^
> . . .
> 
> When I look up these instructions I find that they are not
> classic powerpc instructions:
> ( http://www.nxp.com/assets/documents/data/en/white-papers/POWRPCARCPRMRM.pdf )
> 
> > Whereas the classic architecture defines special-purpose registers (SPRs) and
> > two instructions to access them (Move to Special-Purpose Register (mtspr) and
> > Move from Special-Purpose Register (mfspr)), Book E takes that model and defines
> > optional device control registers (DCRs) and mtdcr and mfdcr instructions, and
> > the EIS-defined performance monitor APU defines performance monitor registers
> > (PMRs) and mtpmr and mfpmr instructions, all based on models provided by the
> > UISA.
> 
> . . .
> 
> Does this imply that clang 3.9.0 needs to support more instructions when
> it is targeting FreeBSD for GENERIC64 based builds? (I include GENERIC64
> and then override some items for my build activity.)
> 
> If yes, then someone probably needs to make a list of what instructions
> need to be present and have someone submit the list into llvm's bugzilla
> and have the submittal listed in:
> 
> [META] Using Clang as the FreeBSD/ppc system compiler
> 
> (25780).
> 
> 
> If GENERIC64 does not need the likes of hwpmc_e500.o built then some
> work on the build environment to avoid GENERIC64 including things with
> non-classic instruction use would appear to be needed. (No llvm
> involvement for this case.) I doubt this is the case as it would
> seem that the problem would reoccur when alternate KERNCONF's were
> in use instead that do require something like of hwpmc_e500.o to be
> built.
> 
> 
> Note: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214903 is about
> this issue from the FreeBSD side of things. I just noticed the status
> of the specific instructions involved and also that the cross-build
> and on-powerpc64 build get the same result (unlike the recent
> WITH_LIB32= discovery).
> 
> ===
> Mark Millard
> markmi at dsl-only.net
> 
> _______________________________________________
> freebsd-toolchain@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
> To unsubscribe, send any mail to "freebsd-toolchain-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20161205161904.GA7889>