Sign in to follow this  
Followers 0
koe

Compiling x64 amd

7 posts in this topic

..\client\memcpy_amd.cpp(90) : error C4235: nonstandard extension used : '__asm' keyword not supported on this architecture

Помогите скомпилировать под x64 amd (Vista x64 Studio 2008 TS) компилируется под x86 нормально, под x64 вышеназванная ошибка.

Share this post


Link to post

Буду передать запрос на разработчики, но лично я не думаю что решение будет легко, если возможно вообще.

Share this post


Link to post

По сути надо добавить заголовок memory.h, закоментировать в stdinc.h оптимизатор memcpy_amd.h и блок:

#undef memcpy

#define memcpy memcpy2

#undef memset

#define memset memset2

#undef memzero

#define memzero memzero2
Но т.к. стандартной memzero нет, её надо будет переписать через стандартную memset. И затем переопределить memcpy2, memset2 и memzero2 как:
#define memcpy2 memcpy

#define memset2 memset

#define memzero2 memzero

Если что-то из этого не понятно - лучше забить на компиляцию под 64 бит.

Share this post


Link to post

По сути надо добавить заголовок memory.h, закоментировать в stdinc.h оптимизатор memcpy_amd.h и блок:

#undef memcpy
#define memcpy memcpy2
#undef memset
#define memset memset2
#undef memzero
#define memzero memzero2
Но т.к. стандартной memzero нет, её надо будет переписать через стандартную memset. И затем переопределить memcpy2, memset2 и memzero2 как:
#define memcpy2 memcpy
#define memset2 memset
#define memzero2 memzero

Если что-то из этого не понятно - лучше забить на компиляцию под 64 бит.

Excuse for commenting here directly, but that solution is not good at all... here is why it doesn't work and what should be done to preserve same optimized code and functionality that in 32bit (because those asm blocks that fail for 64bit are optimized for performance).

When targeting x64 platforms in Visual Studio 2005 or later, programmers are no longer able to use inline assembly code as they did for 32-bit code. This forces the programmer to either rely on C/C++ code using intrinsics, or to tediously create a 64-bit MASM (.asm) version of the function.

Share this post


Link to post

I know that removing of optimization routine is a dirty hack but in present time I see no other way to compile code as x64 executable.

PS: By the way are intrinsic functions from latest VS really slow down the code? As I see from the headers they use SSE too.

Share this post


Link to post

PS: By the way are intrinsic functions from latest VS really slow down the code? As I see from the headers they use SSE too.

SSE perhaps, but what about other optimizations...

Share this post


Link to post

Excuse for commenting here directly, but that solution is not good at all... here is why it doesn't work and what should be done to preserve same optimized code and functionality that in 32bit (because those asm blocks that fail for 64bit are optimized for performance).

When targeting x64 platforms in Visual Studio 2005 or later, programmers are no longer able to use inline assembly code as they did for 32-bit code. This forces the programmer to either rely on C/C++ code using intrinsics, or to tediously create a 64-bit MASM (.asm) version of the function.

Извините на директний коментар, но ето решение вообще плохо... смотрите почему оно не работает и что нужно сделать для сохранения оптимизацией в кода и функкциональност на 32 бит (потому что ети asm частици, неработающих под 64 бит - оптимизирование для производительност).

Когда приступаем к х64 платформьiй на VS 2005 или позднее, програмисти болше не могут ползвать "?встроеннои в реду-inline?" асемблаторнии код, как они делали для 32-битовой код. Ето задолжает програмист либо лежат на С/С++ код, с употребления

Share this post


Link to post
Sign in to follow this  
Followers 0