[OE-core] [PATCH] add tunings for 32-bit ARMv8-a

Dragomir Daniel daniel.dragomir at windriver.com
Thu Feb 18 13:28:19 UTC 2016



On 02/16/2016 06:20 PM, Martin Jansa wrote:
> On Tue, Feb 16, 2016 at 06:08:45PM +0200, Dragomir Daniel wrote:
>>
>> On 02/16/2016 04:54 PM, Martin Jansa wrote:
>>> On Tue, Feb 16, 2016 at 04:28:38PM +0200, Daniel Dragomir wrote:
>>>> From: Cristian Bercaru <cristian.bercaru at windriver.com>
>>>>
>>>> This patch adds tunes for 32-bit armv8 platforms. The user can select
>>>> the vector floating-point instruction set: vfpv3, vfpv4 or fp-armv8
>>>> and the Neon, crc and crypto extensions.
>>> This adds TUNEVALID for various tune features which aren't valid for
>>> armv7a and lower (keep in mind that feature-arm-vfp.inc is included from arch-armv5.inc)
>>>
>>> Did you test this with tune-test script to at least confirm that it at
>>> least still parses for all arm* DEFAULTTUNEs?
>>>
>> I just took over my colleague work and I need to continue it.
>> Tunnings are new for meand I'm looking for a review about the actual
>> approach
>> from my colleague for adding ARMv8-a tunning for 32-bit.
>>
>> No, I didn't ran such script.
>> Can you please tell me how to run it or at least where is this located.
>> It's scripts/tune/test.sh from
>> http://git.openembedded.org/openembedded-core-contrib/log/?h=jansa/tune2-test
>> ?
>> It's there any Readme for it?
> There isn't one, basically run the script (update it if needed) and push
> your results somewhere (ideally in branch which contains results from
> jansa/tune2-test so that it shows only the smaller diffs in parsed
> results.
>
> It was shortly discussed in previous tune thread:
> http://lists.openembedded.org/pipermail/openembedded-core/2016-February/117395.html

Hi Martin,
I ran the script and I got many errors (log.fake*). I pushed the result 
in a public personal repo:
https://github.com/ddragomi/tune_test/tree/master/tune

I put my results over yours from openembedded-core-contrib to see diffs 
better. You can see the commit here:
https://github.com/ddragomi/tune_test/commit/bb08541020f211d6e1579069a58bb28eb2456b87

Don't know why, but there are fewer combinations for machine and tune. I 
did this: pull openembedded-core (apply patch) and bitbake, source 
oe-init-build-env, copied your scrip and ran for the build created by 
default. Did I made something wrong?

Thanks,
Daniel

>> Thanks,
>> Daniel
>>
>>>> Signed-off-by: Cristian Bercaru <cristian.bercaru at windriver.com>
>>>> Signed-off-by: Daniel Dragomir <daniel.dragomir at windriver.com>
>>>> ---
>>>>    meta/conf/machine/include/arm/arch-armv7a.inc      |  1 -
>>>>    meta/conf/machine/include/arm/arch-armv8a.inc      | 65 ++++++++++++++++++++++
>>>>    meta/conf/machine/include/arm/feature-arm-neon.inc |  3 -
>>>>    meta/conf/machine/include/arm/feature-arm-vfp.inc  | 59 ++++++++++++++++----
>>>>    4 files changed, 112 insertions(+), 16 deletions(-)
>>>>    create mode 100644 meta/conf/machine/include/arm/arch-armv8a.inc
>>>>    delete mode 100644 meta/conf/machine/include/arm/feature-arm-neon.inc
>>>>
>>>> diff --git a/meta/conf/machine/include/arm/arch-armv7a.inc b/meta/conf/machine/include/arm/arch-armv7a.inc
>>>> index d3b6f64..ac85fda 100644
>>>> --- a/meta/conf/machine/include/arm/arch-armv7a.inc
>>>> +++ b/meta/conf/machine/include/arm/arch-armv7a.inc
>>>> @@ -6,7 +6,6 @@ TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "armv7a", " -march=armv7-a
>>>>    MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "armv7a", "armv7a:", "" ,d)}"
>>>>    
>>>>    require conf/machine/include/arm/arch-armv6.inc
>>>> -require conf/machine/include/arm/feature-arm-neon.inc
>>>>    
>>>>    # Little Endian base configs
>>>>    AVAILTUNES += "armv7a armv7at armv7a-vfpv3d16 armv7at-vfpv3d16 armv7a-vfpv3 armv7at-vfpv3 armv7a-neon armv7at-neon"
>>>> diff --git a/meta/conf/machine/include/arm/arch-armv8a.inc b/meta/conf/machine/include/arm/arch-armv8a.inc
>>>> new file mode 100644
>>>> index 0000000..1b062b8
>>>> --- /dev/null
>>>> +++ b/meta/conf/machine/include/arm/arch-armv8a.inc
>>>> @@ -0,0 +1,65 @@
>>>> +DEFAULTTUNE ?= "armv8a"
>>>> +
>>>> +TUNEVALID[armv8a] = "Enable instructions for ARMv8-a"
>>>> +TUNEVALID[crc] = "Enable CRC instrucitons for ARMv8-a"
>>>> +TUNECONFLICTS[armv8a] = "armv4 armv5 armv6 armv7 armv7a"
>>>> +TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "armv8a", " -march=armv8-a", "", d)}"
>>>> +TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "crc", "+crc", "", d)}"
>>>> +MACHINEOVERRIDES =. "${@bb.utils.contains("TUNE_FEATURES", "armv8a", "armv8a:", "" ,d)}"
>>>> +
>>>> +require conf/machine/include/arm/arch-armv7a.inc
>>>> +
>>>> +# Little Endian base configs
>>>> +AVAILTUNES += "armv8a armv8a-vfpv3 armv8a-neon armv8a-vfpv4 armv8a-neon-vfpv4 armv8a-fp-armv8 armv8a-neon-fp-armv8 armv8a-crypto-neon-fp-armv8"
>>>> +ARMPKGARCH_tune-armv8a ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-vfpv3 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-neon ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-vfpv4 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-neon-vfpv4 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-fp-armv8 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-neon-fp-armv8 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crypto-neon-fp-armv8 ?= "armv8a"
>>>> +TUNE_FEATURES_tune-armv8a ?= "arm armv8a vfp"
>>>> +TUNE_FEATURES_tune-armv8a-vfpv3 ?= "${TUNE_FEATURES_tune-armv8a} vfpv3"
>>>> +TUNE_FEATURES_tune-armv8a-neon ?= "${TUNE_FEATURES_tune-armv8a} neon"
>>>> +TUNE_FEATURES_tune-armv8a-vfpv4 ?= "${TUNE_FEATURES_tune-armv8a} vfpv4"
>>>> +TUNE_FEATURES_tune-armv8a-neon-vfpv4 ?= "${TUNE_FEATURES_tune-armv8a} neon vfpv4"
>>>> +TUNE_FEATURES_tune-armv8a-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a} fp-armv8"
>>>> +TUNE_FEATURES_tune-armv8a-neon-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a} neon fp-armv8"
>>>> +TUNE_FEATURES_tune-armv8a-crypto-neon-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a} crypto neon fp-armv8"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a = "${PACKAGE_EXTRA_ARCHS_tune-armv7a} armv8a armv8a-vfp"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-vfp-vfpv3"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-vfpv3} armv8a-vfp-neon"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-vfpv3} armv8a-vfp-vfpv4"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-vfpv4} armv8a-vfp-neon armv8a-vfp-neon-vfpv4"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-vfp-fp-armv8"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-neon-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-fp-armv8} armv8a-vfp-neon-fp-armv8"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crypto-neon-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-neon-fp-armv8} armv8a-vfp-crypto-neon-fp-armv8"
>>>> +
>>>> +# CRC configs
>>>> +AVAILTUNES += "armv8a-crc armv8a-crc-vfpv3 armv8a-crc-neon armv8a-crc-vfpv4 armv8a-crc-neon-vfpv4 armv8a-crc-fp-armv8 armv8a-crc-neon-fp-armv8 armv8a-crc-crypto-neon-fp-armv8"
>>>> +ARMPKGARCH_tune-armv8a-crc ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-vfpv3 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-neon ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-vfpv4 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-neon-vfpv4 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-fp-armv8 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-neon-fp-armv8 ?= "armv8a"
>>>> +ARMPKGARCH_tune-armv8a-crc-crypto-neon-fp-armv8 ?= "armv8a"
>>>> +TUNE_FEATURES_tune-armv8a-crc ?= "${TUNE_FEATURES_tune-armv8a} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-vfpv3 ?= "${TUNE_FEATURES_tune-armv8a-vfpv3} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-neon ?= "${TUNE_FEATURES_tune-armv8a-neon} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-vfpv4 ?= "${TUNE_FEATURES_tune-armv8a-vfpv4} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-neon-vfpv4 ?= "${TUNE_FEATURES_tune-armv8a-neon-vfpv4} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a-fp-armv8} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-neon-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a-neon-fp-armv8} crc"
>>>> +TUNE_FEATURES_tune-armv8a-crc-crypto-neon-fp-armv8 ?= "${TUNE_FEATURES_tune-armv8a-crypto-neon-fp-armv8} crc"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc = "${PACKAGE_EXTRA_ARCHS_tune-armv8a} armv8a-crc-vfp"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-vfpv3 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} armv8a-vfp-vfpv3 armv8a-crc-vfp-vfpv3"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-neon = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-vfpv3} armv8a-vfp-neon armv8a-crc-vfp-neon"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-vfpv3} armv8a-vfp-vfpv4 armv8a-crc-vfp-vfpv4"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-neon-vfpv4 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-vfpv4} armv8a-vfp-neon armv8a-crc-vfp-neon armv8a-vfp-neon-vfpv4 armv8a-crc-vfp-neon-vfpv4"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc} armv8a-vfp-fp-armv8 armv8a-vfp-fp-crc-armv8"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-neon-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-fp-armv8} armv8a-vfp-neon-fp-armv8 armv8a-crc-vfp-neon-fp-armv8"
>>>> +PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-crypto-neon-fp-armv8 = "${PACKAGE_EXTRA_ARCHS_tune-armv8a-crc-neon-fp-armv8} armv8a-vfp-crypto-neon-fp-armv8 armv8a-crc-vfp-crypto-neon-fp-armv8"
>>>> +
>>>> diff --git a/meta/conf/machine/include/arm/feature-arm-neon.inc b/meta/conf/machine/include/arm/feature-arm-neon.inc
>>>> deleted file mode 100644
>>>> index e8b2b85..0000000
>>>> --- a/meta/conf/machine/include/arm/feature-arm-neon.inc
>>>> +++ /dev/null
>>>> @@ -1,3 +0,0 @@
>>>> -TUNEVALID[neon] = "Enable Neon SIMD accelerator unit."
>>>> -TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "neon", bb.utils.contains("TUNE_FEATURES", "vfpv4", " -mfpu=neon-vfpv4", " -mfpu=neon", d), "" , d)}"
>>>> -ARMPKGSFX_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "neon", "-neon", "", d)}"
>>>> diff --git a/meta/conf/machine/include/arm/feature-arm-vfp.inc b/meta/conf/machine/include/arm/feature-arm-vfp.inc
>>>> index 3dfbeac..12a4e81 100644
>>>> --- a/meta/conf/machine/include/arm/feature-arm-vfp.inc
>>>> +++ b/meta/conf/machine/include/arm/feature-arm-vfp.inc
>>>> @@ -1,17 +1,52 @@
>>>>    TUNEVALID[vfp] = "Enable Vector Floating Point (vfp) unit."
>>>> -ARMPKGSFX_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "vfp", "-vfp", "" ,d)}"
>>>> -
>>>>    TUNEVALID[vfpv3d16] = "Enable Vector Floating Point Version 3 with 16 registers (vfpv3-d16) unit."
>>>> -TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "vfpv3d16", " -mfpu=vfpv3-d16", "", d)}"
>>>> -ARMPKGSFX_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "vfpv3d16", "-vfpv3d16", "" ,d)}"
>>>> -
>>>>    TUNEVALID[vfpv3] = "Enable Vector Floating Point Version 3 with 32 registers (vfpv3) unit."
>>>> -TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "vfpv3", " -mfpu=vfpv3", "", d)}"
>>>> -ARMPKGSFX_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "vfpv3", "-vfpv3", "" ,d)}"
>>>> -
>>>>    TUNEVALID[vfpv4] = "Enable Vector Floating Point Version 4 (vfpv4) unit."
>>>> -ARMPKGSFX_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "vfpv4", "-vfpv4", "" ,d)}"
>>>> -
>>>> +TUNEVALID[fp-armv8] = "Enable ARMv8 Vector Floating Point unit."
>>>> +TUNEVALID[neon] = "Enable vfpv3 and Neon SIMD accelerator unit."
>>>> +TUNEVALID[crypto] = "Enable ARMv8 crypto extension."
>>>>    TUNEVALID[callconvention-hard] = "Enable EABI hard float call convention, requires VFP."
>>>> -TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "vfp", bb.utils.contains("TUNE_FEATURES", "callconvention-hard", " -mfloat-abi=hard", " -mfloat-abi=softfp", d), "" ,d)}"
>>>> -ARMPKGSFX_EABI .= "${@bb.utils.contains("TUNE_FEATURES", [ "callconvention-hard", "vfp" ], "hf", "", d)}"
>>>> +
>>>> +python () {
>>>> +	if bb.utils.contains("TUNE_FEATURES", "crc", True, False, d):
>>>> +		d.appendVar("ARMPKGSFX_FPU", "-crc")
>>>> +
>>>> +	if bb.utils.contains("TUNE_FEATURES", "vfp", True, False, d):
>>>> +		d.appendVar("ARMPKGSFX_FPU", "-vfp")
>>>> +
>>>> +	if bb.utils.contains("TUNE_FEATURES", "vfpv3d16", True, False, d):
>>>> +		d.appendVar("TUNE_CCARGS", " -mfpu=vfpv3-d16")
>>>> +		d.appendVar("ARMPKGSFX_FPU", "-vfpv3d16")
>>>> +
>>>> +	if bb.utils.contains("TUNE_FEATURES", "vfpv3", True, False, d):
>>>> +			d.appendVar("TUNE_CCARGS", " -mfpu=vfpv3")
>>>> +			d.appendVar("ARMPKGSFX_FPU", "-vfpv3")
>>>> +	elif bb.utils.contains("TUNE_FEATURES", "vfpv4", True, False, d):
>>>> +		if bb.utils.contains("TUNE_FEATURES", "neon", True, False, d):
>>>> +			d.appendVar("TUNE_CCARGS", " -mfpu=neon-vfpv4")
>>>> +			d.appendVar("ARMPKGSFX_FPU", "-neon-vfpv4")
>>>> +		else:
>>>> +			d.appendVar("TUNE_CCARGS", " -mfpu=vfpv4")
>>>> +			d.appendVar("ARMPKGSFX_FPU", "-vfpv4")
>>>> +	elif bb.utils.contains("TUNE_FEATURES", "fp-armv8", True, False, d):
>>>> +		if bb.utils.contains("TUNE_FEATURES", "neon", True, False, d):
>>>> +			if bb.utils.contains("TUNE_FEATURES", "crypto", True, False, d):
>>>> +				d.appendVar("TUNE_CCARGS", " -mfpu=crypto-neon-fp-armv8")
>>>> +				d.appendVar("ARMPKGSFX_FPU", "-crypto-neon-fp-armv8")
>>>> +			else:
>>>> +				d.appendVar("TUNE_CCARGS", " -mfpu=neon-fp-armv8")
>>>> +				d.appendVar("ARMPKGSFX_FPU", "-neon-fp-armv8")
>>>> +		else:
>>>> +			d.appendVar("TUNE_CCARGS", " -mfpu=fp-armv8")
>>>> +			d.appendVar("ARMPKGSFX_FPU", "-fp-armv8")
>>>> +	elif bb.utils.contains("TUNE_FEATURES", "neon", True, False, d):
>>>> +		d.appendVar("TUNE_CCARGS", " -mfpu=neon")
>>>> +		d.appendVar("ARMPKGSFX_FPU", "-neon")
>>>> +
>>>> +	if bb.utils.contains("TUNE_FEATURES", "callconvention-hard", True, False, d):
>>>> +		d.appendVar("TUNE_CCARGS", " -mfloat-abi=hard")
>>>> +	else:
>>>> +		d.appendVar("TUNE_CCARGS", " -mfloat-abi=softfp")
>>>> +	if bb.utils.contains("TUNE_FEATURES", [ "vfp", "callconvention-hard" ], True, False, d):
>>>> +		d.appendVar("ARMPKGSFX_EABI", "hf")
>>>> +}
>>>> -- 
>>>> 1.9.1
>>>>
>>>> -- 
>>>> _______________________________________________
>>>> Openembedded-core mailing list
>>>> Openembedded-core at lists.openembedded.org
>>>> http://lists.openembedded.org/mailman/listinfo/openembedded-core




More information about the Openembedded-core mailing list