Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Assembly x86 > Re: optimizatio...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 8 of 13 Topic 4621 of 4710
Post > Topic >>

Re: optimization possibilities...

by "Chris Thomasson" <spamtrap@[EMAIL PROTECTED] > Apr 19, 2008 at 04:53 PM

"Timothy Baldwin" <spamtrap@[EMAIL PROTECTED]
> wrote in message 
news:nsednUryuaSrUZTVRVnyuQA@[EMAIL PROTECTED]
> In message <oc6dnTLn9pEyoZTVnZ2dnUVZ_gmdnZ2d@[EMAIL PROTECTED]
>, Chris
Thomasson
> <spamtrap@[EMAIL PROTECTED]
> wrote:
>
>> Before I convert this code into AT&T syntax for GAS to assemble, and to
>> MASM I was wondering if there are any possible optimizations I can 
>> perform
>> on the following code, I will show the C header first:
>
[...]

> Also you
> can store a constant into memory.
>
[...]
>
> Or on Pentium 4 or later:
> MOV ECX, [ESP + 4]
> MFENCE
> MOV [ECX], 0
> RET

Don't you mean:

MOV DWORD PTR [ECX], 0


?

Try running this program, which compiles on VC++:
________________________________________________________________
typedef int atomicword_i686;

typedef char atomicword_i686_static_assert[
  (sizeof(atomicword_i686) == 4) ? 1 : -1
];

__declspec(****d) void
null_i686(
 atomicword_i686* const _this
) {
  _asm {
    MOV EAX, [ESP + 4]
    MOV [EAX], 0
    RET
  }
}

__declspec(****d) void
nullword_i686(
 atomicword_i686* const _this
) {
  _asm {
    MOV EAX, [ESP + 4]
    MOV DWORD PTR [EAX], 0
    RET
  }
}

#include <stdio.h>

int main() {
  atomicword_i686 word = 0x12345678;
  nullword_i686(&word);
  if (word) {
    puts("CRAP 1!");
  }
  word = 0x12345678;
  null_i686(&word);
  if (word) {
    puts("CRAP 2!");
  }
  return 0;
}

________________________________________________________________


You should get an output of 'CRAP 2!'. The 'null_i686()' function does not

set the whole word to NULL. However, the 'nullword_i686()' does because it

uses 'MOV DWORD PTR [EAX], 0'. If you exchange the call to 'null_i686()' 
with 'nullword_i686()', then the output will be nothing.


[...]
 




 13 Posts in Topic:
optimization possibilities...
"Chris Thomasson&quo  2008-04-18 17:30:10 
Re: optimization possibilities...
Terje Mathisen <spamt  2008-04-19 07:30:55 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-19 14:06:11 
Re: optimization possibilities...
Timothy Baldwin <spam  2008-04-19 11:40:51 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-19 12:27:17 
Re: optimization possibilities...
Timothy Baldwin <spam  2008-04-22 20:36:39 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-22 16:58:52 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-19 16:53:01 
Re: optimization possibilities...
"Alexei A. Frounze&q  2008-04-19 00:15:30 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-19 12:41:01 
Re: optimization possibilities...
"Alexei A. Frounze&q  2008-04-20 02:12:38 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-04-20 11:33:37 
Re: optimization possibilities...
"Chris Thomasson&quo  2008-06-10 23:30:33 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sun Jul 6 20:01:23 CDT 2008.