Re: PPC GCC Inline assembly help

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

 




Ian Lance Taylor-3 wrote:
> 
> eija_flight <ajie.dirgantara@xxxxxxxxxxxxxxx> writes:
> 
>> I'm using GCC inline assembly on PowerPc.
>>
>> Below codes is works :
>>
>> int reg_gpr()
>> {
>> int Rx = 0;
>> 	__asm__ (
>> 		"mr 31,%0\n"
>> 		:
>> 		:"i"(Rx)
>> 		);
>> }
>>
>> But not with this one : 
>>
>> reg_gpr(0);
>> int reg_gpr(int Rx)
>> {
>> 	__asm__ (
>> 		"mr 31,%0\n"
>> 		:
>> 		:"i"(Rx)
>> 		);
>> }
>>
>> It will send error messages "impossible constraints in asm"
>> Is there any other method to modify Rx value from outside functions? 
> 
> By using the 'i' constraint you are requiring a constant integer.  In
> the second case you only have a constant integer if the function is
> inlined, which will normally not happen when not optimizing.  You can
> force it to happen generally by using __attribute__ ((always_inline)).
> 
> Or, you could change to using the 'r' constraint instead of, or in
> addition to, the 'i' constraint.  The 'r' constraint will permit the
> value to be in a general register.
> 
> Ian
> 
> 

I'm using the "i" constraint because I need to access specific registers
respectively, so I need to modify and then pass the variable value to the
asm codes to change the usage of each register dynamically. By using "r"
constraint, the compiler will be use any available general register, How is
my problem can be done by this method?

Thanks,  

-- 
View this message in context: http://www.nabble.com/PPC-GCC-Inline-assembly-help-tp23403005p23419787.html
Sent from the gcc - Help mailing list archive at Nabble.com.


[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