Inline assembly for arm-linux-gcc(ARM926EJ-S)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi gcc gurus,

	  I want to convert the ALREADY EXISTING INLINE ASSEMBLY CODE DEVELOPED IN
ADS to arm-linux-gcc.
        And, I am not getting any concrete info related to: INLINE ASSEMBLY
IN ARM-LINUX-GCC.
        The gcc manual doesnt say much about the constraints and modifiers
that are SPECIFIC TO ARM.
        For illustration I am listing few of the problems I am facing:

        In continuation to our discussion, I am sending the listing the
difficulties I am facing
        in using Inline assembly in gcc(arm-linux-gcc):

                /* ADS code */
                int *temp = (data + j);
                        __asm__ {
                                          LDRD R0,[temp]
                                          MOV data1rd,R0
                                          MOV data1id,R1
                                     }  /* ADS code */



     1. When the first instruction is translated as:
                //  LDRD R0,[temp]
                        __asm__ ( "LDRD r0, (%0)"
                                         :
                                         :"g"(temp)
                                         );

I am getting following error:
[anand@dd2testing2 HE-AAC]$ make
/tmp/cci4CSSE.s: Assembler messages:
/tmp/cci4CSSE.s:188: Error: missing ']'
/tmp/cci4CSSE.s:188: Error: missing ')'
/tmp/cci4CSSE.s:188: Error: garbage following instruction -- `ldrd
r0,([fp,#-80])'

                Further, when the parenthesis around %0 are removed, the
instruction is assembled without any concern.
                But, that may not serve the purpose as 'temp' is a pointer.
And, the operand ordering is not
                in aaccordance with gcc.

        Can I get more info on the order of operands and the constraints
that apply in case of ARM(ARM926EJ-S, to be specific).
        How can I differentiate a ordinary variable and a pointer derefrence
in inline assembly.



        For the second instruction has been translated as:

                        __asm__ ( "MOV r0, %0"
                                         :"+g"(data1rd)
                                         :
                                        );

        and this givesthe following error:

[anand@dd2testing2 HE-AAC]$ make
/tmp/cc0xa7Fh.s: Assembler messages:
/tmp/cc0xa7Fh.s:190: Error: register or shift expression expected -- `mov
r0,[fp
,#-72]'


        Please can soemone suggest a better source in this regard(Inline
assemly in C source files in arm-linux-gcc)

                Regards,
                        Anand Kulkarni
                        +91 9880781187


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux