Re: clobbered registers
- From: "Rod Pemberton" <spamtrap@xxxxxxxxxx>
- Date: Fri, 28 Apr 2006 21:47:15 -0400
"luke" <spamtrap@xxxxxxxxxx> wrote in message
news:1146218361.241330.144990@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Thanks Rod.
As far as I can see your code, as well, is not working correctly:
/APP
movw %dx,8(%eax)
rorl $16,%edx
movb %dl,16(%eax)
movb %dh,28(%eax)
/NO_APP
movl -16(%ebp), %eax
/APP
movw %dx,8(%eax)
rorl $16,%edx
movb %dl,16(%eax)
movb %dh,28(%eax)
/NO_APP
which register? I mean edx register not eax
My mistake... I'm surprised no one else corrected me. :)
there is no reloading of register edx. If the edx is not reloaded the
ror instruction of the 1st block does mess it up.
Okay, I see what you want. 'd' isn't loading edx with 'base' at all. If
'code_base' and 'data_base' are C variables, you'll probably need 'm'.
#define set_base(addr,base) \
__asm__("movl %0, %%edx\n" \
"movw %%dx,%1\n" \
"rorl $16,%%edx\n" \
"movb %%dl,%2\n" \
"movb %%dh,%3\n" \
::"m" (base), \
"m" (*((addr)+2)), \
"m" (*((addr)+4)), \
"m" (*((addr)+7)) \
: "%edx"
)
I added two lines and reorganized the arguments. This should move base from
wherever it is into edx.
Let me (or us) know if that works or can be made to work...
Rod Pemberton
.
- References:
- clobbered registers
- From: luke
- Re: clobbered registers
- From: Rod Pemberton
- Re: clobbered registers
- From: luke
- clobbered registers
- Prev by Date: Re: What's faster?
- Next by Date: Re: lea with fs override
- Previous by thread: Re: clobbered registers
- Next by thread: Re: clobbered registers
- Index(es):
Relevant Pages
|