On Monday, March 23, 2015 6:18:46 PM Mike Gilbert wrote: > On Mon, Mar 23, 2015 at 9:51 PM, Walter Dnes <waltd...@waltdnes.org> wrote: > > On Sun, Mar 22, 2015 at 09:25:53PM -0400, Fernando Rodriguez wrote > > > >> I guess gcc devs are careful when using the model numbers (Intel > >> lists 3 for Atoms, gcc uses only two so that may account for the > >> models I mentioned) but the chance of error is there. The -mno-xxx > >> flags would safeguard against it. > > > > I have one of the earliest Atom chips. Some people have a hard time > > believing this, but it's a 32-bit-only chip; a couple of lines from > > /proc/cpuinfo > > > > model name : Intel(R) Atom(TM) CPU Z520 @ 1.33GHz > > address sizes : 32 bits physical, 32 bits virtual > > > > Intel gives the CPU's specs at... > > > > http://ark.intel.com/products/35466/Intel-Atom-Processor-Z520-512K-Cache-1_33-GHz-533-MHz-FSB > > > > ...where it specifically says... > > > > Intel 64 # No > > > > I want to make absolutely certain that "illegal instructions" are not > > compiled for it. > > You will probably need to add -m32 to CFLAGS to avoid building 64-bit > objects on the 64-bit machine. >
Your CPU is an example of what I'm saying, not just because it doesn't have 64 bit extensions but because it doesn't have MMX (at least according to the specs) and according to the GCC manual -march=atom means: "Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support." So I guess it's more common than I thought. So you may also want to add -mno-mmx to be sure. GCC does check for mmx but it doesn't not use it on the output (probably a bug?). -- Fernando Rodriguez