Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Dec 2016 16:05:17 -0800
From:      Mark Millard <markmi@dsl-only.net>
To:        Roman Divacky <rdivacky@vlakno.cz>
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:  <126E2EDE-9499-4103-A3DB-CC517105DAB2@dsl-only.net>
In-Reply-To: <20161205161904.GA7889@vlakno.cz>
References:  <300CB7A2-34BB-407F-B2E9-D263B119A989@dsl-only.net> <20161205161904.GA7889@vlakno.cz>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2016-Dec-5, at 8:19 AM, Roman Divacky <rdivacky at vlakno.cz> wrote:

> Can you try this patch?
>=20
> Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- 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>;
>=20
> +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 =3D 1, usesCustomInserter =3D 1 in

Direct use of the patch (put into a file) was rejected:

# patch -p0 < llvmPPCInstrInfo_td.patch=20
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
|--- llvm/lib/Target/PowerPC/PPCInstrInfo.td	(revision 288675)
|+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td	(working copy)
--------------------------
Patching file llvm/lib/Target/PowerPC/PPCInstrInfo.td using Plan A...
patch: **** malformed patch at line 6: def MFTB : XFXForm_1<31, 371, =
(outs gprc:$RT), (ins i32imm:$SPR),

So I hand put in the extra lines.

I'll note that in llvm/lib/Target/PowerPC/PPCInstrInfo.td -r309124
the MFTB line is at line number 2300 while your patch listed:

@@ -2373,6 +2373,12 @@

My edit shows as:

# svnlite diff contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td
Index: contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td	(revision =
309179)
+++ contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td	(working copy)
@@ -2300,6 +2300,12 @@
 def MFTB : XFXForm_1<31, 371, (outs gprc:$RT), (ins i32imm:$SPR),
                      "mftb $RT, $SPR", IIC_SprMFTB>;
=20
+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 =3D 1, usesCustomInserter =3D 1 in


Unfortunately the buildkernel still gets the same errors:
(This was tried after a kernel-toolchain .)

# Meta data file =
/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/=
sys/GENERIC64vtsc-NODBG/modules/usr/src/sys/modules/hwpmc/hwpmc_e500.o.met=
a
CMD /usr/bin/clang -B /usr/local/powerpc64-freebsd/bin/ -target =
powerpc64-unknown-freebsd12.0 =
--sysroot=3D/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerp=
c64/usr/src/tmp -B/usr/local/powerpc64-freebsd/bin/  -O2 -pipe  =
-fno-strict-aliasing -D_KERNEL -DKLD_MODULE -nostdinc   =
-DHAVE_KERNEL_OPTION_HEADERS -include =
/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/=
sys/GENERIC64vtsc-NODBG/opt_global.h -I. -I/usr/src/sys -fno-common -g =
-fno-omit-frame-pointer =
-I/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/sr=
c/sys/GENERIC64vtsc-NODBG  -mno-altivec -ffreestanding -fwrapv =
-fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs =
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline =
-Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=3D__freebsd_kprintf__ =
-Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas =
-Wno-error-tautological-compare -Wno-error-empty-body =
-Wno-error-parentheses-equality -Wno-error-unused-function =
-Wno-error-pointer-sign -Wno-error-shift-negative-value  -msoft-float  =
-std=3Diso9899:1999 -c =
/usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c -o hwpmc_e500.o
CMD ctfconvert -L VERSION -g hwpmc_e500.o
CWD =
/usr/obj/powerpc64vtsc_clang_altbinutils_kernel/powerpc.powerpc64/usr/src/=
sys/GENERIC64vtsc-NODBG/modules/usr/src/sys/modules/hwpmc
TARGET hwpmc_e500.o
-- command output --
/usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:475:19: error: =
unrecognized instruction mnemonic
        uint32_t pmgc0 =3D mfpmr(PMR_PMGC0);
                         ^
./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr'
          __asm __volatile("mfpmr %0,%1" : "=3Dr"(val) : "K"(reg));      =
 \
                           ^
<inline asm>:1:2: note: instantiated into assembly here
        mfpmr 3,400
        ^
/usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:478:2: error: =
unrecognized instruction mnemonic
        mtpmr(PMR_PMGC0, pmgc0);
        ^
./machine/pmc_mdep.h:21:19: note: expanded from macro 'mtpmr'
        __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val))
                         ^
<inline asm>:1:2: note: instantiated into assembly here
        mtpmr 400,3
        ^
/usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:446:2: error: =
unrecognized instruction mnemonic
        mtpmr(PMR_PMGC0, PMGC_FAC | PMGC_PMIE | PMGC_FCECE);
        ^
./machine/pmc_mdep.h:21:19: note: expanded from macro 'mtpmr'
        __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val))
                         ^
<inline asm>:1:2: note: instantiated into assembly here
        mtpmr 400,3
        ^
/usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:408:14: error: =
unrecognized instruction mnemonic
                pmc_pmlc =3D mfpmr(PMR_PMLCa0);
                           ^
./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr'
          __asm __volatile("mfpmr %0,%1" : "=3Dr"(val) : "K"(reg));      =
 \
                           ^
<inline asm>:1:2: note: instantiated into assembly here
        mfpmr 10,144
        ^
. . .


=3D=3D=3D
Mark Millard
markmi at dsl-only.net

Older content:

On Sat, Dec 03, 2016 at 08:35:50PM -0800, Mark Millard wrote:
> [Note: At present I can buildworld using WITH_LIB32=3D on
> powerpc64 for TARGET_ARCH=3Dpowerpc64 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.]
>=20
> When I attempt to buildkernel (with WERROR=3D ) via FreeBSD's
> clang 3.9.0 I get the following sorts of error
> reports, *even building on powerpc64* :
>=20
> --- hwpmc_e500.o ---
> /usr/src/sys/modules/hwpmc/../../dev/hwpmc/hwpmc_e500.c:475:19: error: =
unrecognized instruction mnemonic
>        uint32_t pmgc0 =3D mfpmr(PMR_PMGC0);
>                         ^
> ./machine/pmc_mdep.h:24:21: note: expanded from macro 'mfpmr'
>          __asm __volatile("mfpmr %0,%1" : "=3Dr"(val) : "K"(reg));     =
  \
>                           ^
> <inline asm>:1:2: note: instantiated into assembly here
>        mfpmr 3,400
>        ^
> . . .
>=20
> 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.pd=
f )
>=20
>> 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.
>=20
> . . .
>=20
> 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.)
>=20
> 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:
>=20
> [META] Using Clang as the FreeBSD/ppc system compiler
>=20
> (25780).
>=20
>=20
> 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.
>=20
>=20
> Note: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214903 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=3D discovery).
>=20
> =3D=3D=3D
> Mark Millard
> markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?126E2EDE-9499-4103-A3DB-CC517105DAB2>