|
From: Borja F. <bor...@gm...> - 2013-06-29 13:51:19
|
Stepan I've been testing the memory constraint but im getting an assertion
for the following code:
uint8_t delay(unsigned char **p)
{
uint8_t cnt=8;
asm volatile (
"ld %0, %1" "\n\t"
: "=r" (cnt)
: "Q" (p[7]));
return cnt;
}
What's wrong in here?
2013/6/29 Borja Ferrer <bor...@gm...>
> 1) Ok then, I will look into it.
> 2) Yes, in theory types should be legalized up to i16 max, but for some
> reason i got that assertion triggered, i think it was with multibyte inline
> asm, so this has to be solved.
>
>
> 2013/6/28 Borja Ferrer <bor...@gm...>
>
>> Hello Stepan, I will take a look to your patch later, but some questions:
>>
>> 1) does avr-gcc support 64bit values?
>> 2) now that you're working with big data types, does it make sense to
>> remove the assert I commented out about value types that are different to
>> i8 AND i16?
>>
>>
>>
>> 2013/6/28 Stepan Dyatkovskiy <stp...@na...>
>>
>>> Hi Borja.
>>> This is almost the final multibyte constraint patch. Tests are not
>>> created yet.
>>>
>>> Currently I have issue with 64 bit values. Even if I pass them as inline
>>> asm operands, llvm still truncates them to i32.
>>>
>>> What works:
>>>
>>> long a; // 32 bit
>>> void f() {
>>> asm("instr %A0 %B0 %C0 %D0": : "r"(a));
>>> }
>>>
>>>
>>> What doesn't work:
>>>
>>> long long a; // 64 bit
>>> void f() {
>>> asm("instr %A0 %B0 %E0": : "r"(a));
>>> }
>>>
>>> The last one fires assertion since llvm allocates registers for the
>>> first 32 bits only.
>>>
>>> -Stepan.
>>>
>>> Borja Ferrer wrote:
>>>
>>>> Yes fine
>>>>
>>>> El jueves, 27 de junio de 2013, Stepan Dyatkovskiy escribió:
>>>>
>>>> OK. Will do.
>>>> Currently there is a patch with memory constraint and draft
>>>> multibyte constraint (supports only A and B). To be clean under
>>>> multibyte constraints I mean something like this:
>>>> asm volatile("mov __tmp_reg__, %A0" "\n\t"
>>>> "mov %A0, %B0" "\n\t"
>>>> "mov %B0, __tmp_reg__" "\n\t"
>>>> : "=r" (value)
>>>> : "0" (value)
>>>> );
>>>>
>>>> -Stepan.
>>>> Borja Ferrer wrote:
>>>>
>>>> btw, if this is now feature complete you can commit it.
>>>>
>>>>
>>>> 2013/6/27 Borja Ferrer <bor...@gm...
>>>> <mailto:bor...@gm...>**>
>>>>
>>>> No, that code is a personal modification of your examples.
>>>> If you
>>>> aren't getting the correct output from clang that's
>>>> because you
>>>> probably didn't apply a patch i commited last week for
>>>> clang in our SVN.
>>>> The assertion you're getting looks reasonable, it's an old
>>>> friend of
>>>> mine. The reason is that if Y is being reserved as the
>>>> frame
>>>> pointer, you cant have an instruction that uses 2 registers
>>>> when
>>>> only Z is available. I wouldn't mind too much about it.
>>>>
>>>> Now, my 2nd question:
>>>>
>>>> Is there anything else that needs to be covered for the
>>>> memory
>>>> constraint?
>>>>
>>>>
>>>> 2013/6/27 Stepan Dyatkovskiy <stp...@na...
>>>> <mailto:stp...@na...>>
>>>>
>>>> This one looks good. Though ./llc emits "run out of
>>>> registers
>>>> allocation. I'll look at it. Is that from avr-libc?
>>>> -Stepan.
>>>> Borja Ferrer wrote:
>>>>
>>>> Yes, and then I replied the following:
>>>>
>>>> For this C code:
>>>>
>>>> char delay_count;
>>>> char aaa;
>>>> uint8_t delay(unsigned char p)
>>>> {
>>>> uint8_t cnt;
>>>> asm volatile (
>>>> "inst %0, %1" "\n\t"
>>>> : "=Q" (delay_count)
>>>> : "Q" (aaa));
>>>> return cnt;
>>>> }
>>>>
>>>> Clang produces:
>>>>
>>>> define i8 @delay(i8 %p) #0 {
>>>> entry:
>>>> tail call void asm sideeffect "inst $0,
>>>> $1\0A\09",
>>>> "=*Q,*Q"(i8*
>>>> @delay_count, i8* @aaa) #2, !srcloc !4
>>>> ret i8 undef
>>>> }
>>>>
>>>> notice the *Q constraints, so is there anything
>>>> wrong in there?
>>>>
>>>> Is there anything else that needs to be covered
>>>> for the
>>>> memory constraint?
>>>>
>>>>
>>>> 2013/6/27 Stepan Dyatkovskiy <stp...@na...
>>>> <mailto:stp...@na...> <mailto:
>>>> stp...@na...
>>>> <mailto:stp...@na...>>>
>>>>
>>>>
>>>> Hi Borja,
>>>>
>>>> > Stepan, reply in this thread to my 2
>>>> questions again
>>>> if the email
>>>> got lost.
>>>>
>>>> My prev. reply:
>>>>
>>>>
>>>> > Ahh, I didn't know avr-gcc was buggy on
>>>> this
>>>> feature, that's probably
>>>> > the reason for why the code i pasted in my
>>>> previous
>>>> email didn't
>>>> work.
>>>> ...
>>>> > What's wrong with clang? I fixed clang
>>>> inline asm
>>>> support back on
>>>> > friday, so is there anything else that is
>>>> broken?
>>>> It should emit '*Q' instead of 'Q'. That's why
>>>> code
>>>> from prev. email
>>>> didn't work, just compare -emit-llvm -S
>>>> output of
>>>> avr-clang with
>>>> other backends,
>>>>
>>>> > About the getPointerRegClass function, what
>>>> is it
>>>> used for? Also,
>>>> please
>>>> > move the implementation to the cpp file
>>>> instead of
>>>> leaving it in
>>>> the .h.
>>>> Currently, it is used in registers coelescing
>>>> pass.
>>>> While being
>>>> registers inflating, llvm lookups all register
>>>> uses. If
>>>> it found
>>>> that register is used by inline-asm as memory
>>>> operand,
>>>> it requests
>>>> the pointer class with this method (I think
>>>> the largest
>>>> one). But
>>>> may be in future this method will be used in
>>>> more cases.
>>>>
>>>> avr-gcc has buggy implementation of memory
>>>> constraint,
>>>> that's why
>>>> avr-libs doesn't use it at all. We have a
>>>> chance to be
>>>> first here
>>>>
>>>> -Stepan
>>>>
>>>> Borja Ferrer wrote:
>>>>
>>>> Stepan, reply in this thread to my 2
>>>> questions
>>>> again if the
>>>> email got lost.
>>>>
>>>>
>>>> 2013/6/27 Borja Ferrer <
>>>> bor...@gm...
>>>> <mailto:bor...@gm...>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>**>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>**>__>__>
>>>>
>>>>
>>>> No, your last email only says : "So,
>>>> can I
>>>> commit that memory
>>>> constraint patch?"
>>>>
>>>>
>>>> 2013/6/27 Stepan Dyatkovskiy
>>>> <stp...@na... <mailto:stp...@na...>
>>>> <mailto:stp...@na...
>>>> <mailto:stp...@na...>>
>>>> <mailto:stp...@na...
>>>> <mailto:stp...@na...> <mailto:
>>>> stp...@na...
>>>> <mailto:stp...@na...>>>>
>>>>
>>>>
>>>>
>>>> Hm... Didn't you get my previous
>>>> mail? If
>>>> not, I think,
>>>> I have
>>>> to change my mail box.
>>>>
>>>> -Stepan
>>>>
>>>>
>>>> -------- Original Message
>>>> --------
>>>> Subject: Re: [avr-llvm-devel]
>>>> Inline
>>>> assembly. Mostly
>>>> just a stub.
>>>> Date: Tue, 25 Jun 2013 18:30:46
>>>> +0400
>>>> From: Stepan Dyatkovskiy
>>>> <stp...@na... <mailto:stp...@na...>
>>>> <mailto:stp...@na...
>>>> <mailto:stp...@na...>>
>>>> <mailto:stp...@na...
>>>> <mailto:stp...@na...> <mailto:
>>>> stp...@na...
>>>> <mailto:stp...@na...>>>>
>>>> To: Borja Ferrer
>>>> <bor...@gm...
>>>> <mailto:bor...@gm...>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>**>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>
>>>> <mailto:bor...@gm...
>>>> <mailto:bor...@gm...>**>__>__>
>>>> CC: avr-llvm
>>>> <avr-llvm-devel@lists.__source**______forge.net<http://source______forge.net>
>>>> <http://source____forge.net>
>>>> <http://source__forge.net>
>>>> <http://source <http://sourceforge.net>
>>>>
>>>>
>>>
>>
>
|