Messages in this thread | | | Subject | Re: [PATCH 3/4] x86/asm/entry/64: use smaller insns | From | "H. Peter Anvin" <> | Date | Wed, 25 Mar 2015 17:12:20 -0700 |
| |
Ok, "movabs" is crazier than I thought.
On March 25, 2015 5:05:50 PM PDT, Linus Torvalds <torvalds@linux-foundation.org> wrote: >On Wed, Mar 25, 2015 at 4:56 PM, H. Peter Anvin <hpa@zytor.com> wrote: >> No, movabs is yet another instruction (with a 64-bit absolute >address.) But movq can mean 10 or 7 bytes... > >I mentioned movabs because that is literally what as generates at >least for me (or then objdump is confused): > > [torvalds@i7 ~]$ as -v > GNU assembler version 2.24 (x86_64-redhat-linux) using BFD version >version 2.24 > > [torvalds@i7 ~]$ cat t.s > main: > movq $0x12, %rdi > movq $0x1234, %rdi > movq $0x123456, %rdi > movq $0x12345678, %rdi > movq $0x123456789ab, %rdi > > [torvalds@i7 ~]$ as t.s > [torvalds@i7 ~]$ objdump -d a.out > ... > 0: 48 c7 c7 12 00 00 00 mov $0x12,%rdi > 7: 48 c7 c7 34 12 00 00 mov $0x1234,%rdi > e: 48 c7 c7 56 34 12 00 mov $0x123456,%rdi > 15: 48 c7 c7 78 56 34 12 mov $0x12345678,%rdi > 1c: 48 bf ab 89 67 45 23 movabs $0x123456789ab,%rdi > 23: 01 00 00 > >so 'as' is clearly just stupid. It already takes the size of the >constant into account and generates different instructions. Why not >for the common 32-bit case too? > >Oh well. > > Linus
-- Sent from my mobile phone. Please pardon brevity and lack of formatting.
| |