This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: How to save and restore a symbol value in Aarch64?
- From: Jeffrey Walton <noloader at gmail dot com>
- To: Jiong Wang <jiong dot wang at foss dot arm dot com>
- Cc: Andreas Schwab <schwab at linux-m68k dot org>, Binutils <binutils at sourceware dot org>
- Date: Thu, 20 Apr 2017 09:57:08 -0400
- Subject: Re: How to save and restore a symbol value in Aarch64?
- Authentication-results: sourceware.org; auth=none
- References: <CAH8yC8m4ReBF_eY5B_Xs28G0-XYey0dBMssBo+X0pzi-3=OYeg@mail.gmail.com> <87tw5je6r1.fsf@linux-m68k.org> <CAH8yC8=0pov5WiPwk2nMFB94e-Tgg8_LX-02_uP5GbEa9SBYCQ@mail.gmail.com> <e77e6166-8281-ba9b-2451-724ec0d8aecc@foss.arm.com>
- Reply-to: noloader at gmail dot com
On Thu, Apr 20, 2017 at 8:35 AM, Jiong Wang <jiong.wang@foss.arm.com> wrote:
>
>
> On 20/04/17 11:54, Jeffrey Walton wrote:
>>
>> On Thu, Apr 20, 2017 at 6:02 AM, Andreas Schwab <schwab@linux-m68k.org>
>> wrote:
>>>
>>> On Apr 20 2017, Jeffrey Walton <noloader@gmail.com> wrote:
>>>
>>>> I need the method to get the previous .cpu value
>>>
>>> .cpu is not a symbol, it is a directive, so you cannot get its "value".
>>> The effect of the directive is to modify the internal state of the
>>> assembler, which is not directly accessible to the assembler input.
>>
>> Thanks Andreas.
>>
>> Does '.set push, .cpu' and '.set pop, .cpu' work as {expected|desired}
>> for Aarch32 and Aarch64?
>
> It will not work as you expected.
> They are simply treating "push/pop" as symbols, and their value will be the
> string ".cpu".
OK, thanks. My test case was bad. It needed to use a feature other
than NEON after the CRC. Trying to use AES caused the error I was
looking for.
> Below is a purely work around for your reference that you can escape
> assembler's architecture requirement check.
>
> __inline unsigned int GCC_INLINE_ATTRIB
> CRC32B(unsigned int crc, unsigned char v)
> {
> unsigned int r;
> asm (
> "\t.set raw_x0, 0\n"
> "\t.set raw_x1, 1\n"
> "\t.set raw_x2, 2\n"
> "\t.set raw_x3, 3\n"
> "\t.set raw_x4, 4\n"
> "\t.set raw_x5, 5\n"
> "\t.set raw_x6, 6\n"
> "\t.set raw_x7, 7\n"
> "\t#crc32w %w2, %w1, %w0\n"
> "\t.inst\t0x1ac04800 | (raw_%2) | (raw_%1 << 5) |
> (raw_%0 << 16)\n"
> : "=r"(r) : "r"(crc), "r"((unsigned int)v)
> );
> return r;
> }
Thanks Jiong. Wow, I'm fairly certain I would not have gotten that on my own.
If you get to the Baltimore MD or Washington DC area, then dinner and
cold beers are on me.
Jeff