Sorry about the last, attempted message being too large.  I did not know
that there was such a size limit.  I am re-sending the last attempted
message with the attachments removed.  The relevant attachments were
included with the original message with subject "Assembler instruction
errors for push and pop during make".  I would appreciate any help anyone
can provide.

At present I am trying to brush up on assembly & machine coding concepts
and to study the differences between 32-bit and 64-bit processing.
 Hopefully, that will allow me to create a fix for the problem.  One hope
is that, for the assembly programs in question, it does not matter whether
they are assembled as 32-bit code "as is" with only an explicit invocation
of the gnu assembler and a --32 flag adjustment or as 64-bit code with code
adjustments.  But at present that is just wishful thinking.

Also, it is not clear whether building the OpenMPI package entirely as
32-bit code would limit my use of OpenMPI as a library to 64-bit programs
or whether there would be a significant speed penalty.

Here are some ideas that may lead to a solution, but I still need help
solving this problem.

http://stackoverflow.com/questions/6268745/invalid-instruction-suffix-for-push-when-assembling-with-gassuggests
that the problem is caused by trying to assemble 32-bit assembly
code in 64-bit mode and that an option of --32 would likely solve the
problem.  But in my case, would this solution create 32-bit/64-bit
incompatibilities between object modules?

There is also in the same source the suggestion "Prepend .code32 as your
first line."  But there are numerous .s modules in the openmpi-1.6.5 tree,
and perhaps only some of them have this problem.  Perhaps I could modify
all such .s modules and then restore the time stamps so as not to confuse
the makefiles.  But the same question about 32-bit/64-bit incompatibilities
arises.  The only experience I have with assembler code is with an IBM 360
assembler (for debug tracebacks in Fortran) and embedded assembly code in
Turbo Pascal and/or Turbo C/C++ coordinated with assembly output from those
compilers for 8086 code and perhaps a machine-code-to-symbolic disassembler
as well.  I have only the vaguest idea how the gnu assembler works.

There is in my C:\MinGW64\bin directory an assembler as.exe whose --version
output says in part "This assembler was configured for a target of
`x86_64-w64-mingw32'."

There is described in "as --help" output the option:
--32/--64/--x32         generate 32bit/64bit/x32 code

Perhaps I could pass option --32 to the back-end assembler (as.exe ?) via
the gcc option -Wa,--32 in CFLAGS, but it seems this would likely apply to
back-end processing of all compilations and likely cause 32-bit/64-bit
incompatibilities (especially with gfortran objects generated using the
-m64 option).  It seems also that this would largely negate the benefit of
64-bit processing even if no incompatibilities resulted.

"configure --help" output indicates under "Some influential environment
variables:" --
CCAS        assembler compiler command (defaults to CC)
CCASFLAGS   assembler compiler flags (defaults to CFLAGS)

Depending on how configure and its Makefiles work, perhaps I could use CCAS
and perhaps CCASFLAGS to invoke as.exe specifically for the assembly .s
source processing, but, if I use the flag --32 for the .s assembly
programs, would this also create 32-bit/64-bit incompatibilities?

-- 
*- Richard Haney*


---------- Forwarded message ----------
From: Richard Haney <rfha...@gmail.com>
List-Post: users@lists.open-mpi.org
Date: Sat, Aug 17, 2013 at 9:29 PM
Subject: Assembler instruction errors for push and pop during make
To: us...@open-mpi.org


During make I get several instruction errors for push, pushl, pop, and popl
 at atomic-asm.S , which is included indirectly in asm.c .  For example,
for the first reported "Error", the instruction

pushl  %ebp

apparently generates the error message

atomic-asm.S:5: Error: invalid instruction suffix for `push'

There are several more Error messages like that.

---

And the instruction

push    %ebx

apparently generates the error message

atomic-asm.S:64: Error: operand type mismatch for `push'

---

And the instruction

pop   %ebx

apparently generates the error message

atomic-asm.S:68: Error: operand type mismatch for `pop'

---

And the instruction

popl  %ebp

apparently generates the error message

atomic-asm.S:75: Error: invalid instruction suffix for `pop'

-----------------------------------------------

It seems worth noting that make does a symbolic link involving "atomic-asm.S"
immediately before the processing of this file, which generates the errors,
but the configure output reports

checking whether ln -s works... no, using cp -p

as if symbolic links will not be used.

----------------------------------------

The configure output was generated by executing the script file "
mpiconfigure" via command

*$ mpiconfigure  &>  openmpi-1.6.5_configure.out*

"mpiconfigure" executes

*export LD_LIBRARY_PATH=/c/MinGW64/lib/gcc/x86_64-w64-mingw32/4.6.1*

just before executing ./configure ... so that I won't forget to set
LD_LIBRARY_PATH
. 

The make command used was

*$ make -j 2     &>  make_-j_2.out*

I am using the Mingw MSYS 1.0 command-window/bash in a Windows 7
environment for processing the commands.

The compilers are Mingw 64-bit as reported in config.log ; these are not
"official" Mingw compiler versions, but supposedly are very nearly so --
see http://tdm-gcc.tdragon.net/ for details:

configure:5375: gcc --version >&5
gcc.exe (tdm64-1) 4.6.1

configure:15880: g++ --version >&5
g++.exe (tdm64-1) 4.6.1

configure:28191: gfortran.exe --version >&5
GNU Fortran (tdm64-1) 4.6.1

The processor is an Intel Sandybridge i5, with capability for parallel
execution of four threads.

My guess is that these errors are due simply to a mismatch between the
assembly instructions gcc can understand and the assembly instructions that
OpenMPI assumes gcc can understand.

Is there some flag I can set to tell gcc that a particular assembly
language (dialect) is being used?  And, if so, can I set it for make
without having to re-run configure?

-- 
*- Richard Haney*
*
*

Reply via email to