Subject: |
Re: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base |
From: |
Jeff Hill <[email protected]> |
To: |
Jeff Hill <[email protected]> |
Date: |
Wed, 10 Aug 2011 19:36:38 -0000 |
> Actually, where does the >=586 requirement come from?
I made this (quick) decision originally based on some observed gcc preprocessor predefined macro differences (see attached below), but in fact that difference doesn’t matter if we are building for 32 bit architecture, and so it's true that i486 is sufficient for the gcc atomic intrinsic operations.
However we should ask ourselves another question. What other CPU-based code acceleration capabilities are we missing out on if we build for 22 year old 486 CPU architecture. IMHO 22 years is a long time in the tech business. As I recall, starting with the MS VS 2005 compiler MS dropped support for building for any processor before pentium II. Note also that this change is setting a minimum architecture for workstations, and has zero impact on the embedded platforms.
1989 486 introduced
1993 586 (Pentium I) introduced
1997 pentium II introduced
1999 pentium III introduced
Windows XP requires a 586 processor or better. Suspect that Linux distros have similar minimum requirements.
In the end it’s a judgment call on what minimum arch is appropriate so I defer to whatever consensus is arrived at. IMHO, our past practice of establishing no minimum x86 arch for workstations is probably not optimal, and setting 586 for R3.15 is unlikely to cause any substantive discomfort.
PS: While testing the performance on the various x86 versions I found a small ifdef bug (related to detecting sufficient x86 architecture on old gcc) in the gcc version of epicsAtomicCD.h for which I have pushed a fix to the atomics branch.
Jeff
g++ -march=i586 -E -dM -x c++ dog.cpp | sort
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
g++ -march=i486 -E -dM -x c++ dog.cpp | sort
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
With -march=i386
<none defined>
--
https://code.launchpad.net/~epics-core/epics-base/epicsR3.15-atomics/+merge/70642
Your team EPICS Core Developers is requested to review the proposed merge of lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base.
- References:
- [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base Jeff Hill
- Navigate by Date:
- Prev:
RE: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base Jeff Hill
- Next:
Re: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base Michael Davidsaver
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
<2011>
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base mdavidsaver
- Next:
Re: [Merge] lp:~epics-core/epics-base/epicsR3.15-atomics into lp:epics-base Jeff Hill
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
<2011>
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|