Olá pessoal, continuo com minhas experiências no desenvolvimento de
jogos, e agora meti na venta de usar SSE para otimizar minhas
operações com vetores até ai sem problemas.
Mas eu quero que meu código seja compilado no GCC e no Visual C++,
só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> Olá pessoal, continuo com minhas experiências no desenvolvimento de > jogos, e agora meti na venta de usar SSE para otimizar minhas > operações com vetores até ai sem problemas. > Mas eu quero que meu código seja compilado no GCC e no Visual C++, > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
Você pode usar os intrisincs para SSE que funciona em ambos compilados. Porém com o GCC você precisa ficar verificando o código gerado pois ele faz um péssimo serviço na alocação de registradores.
Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas e pode ficar ilegível, mas pode compensar, dependendo do caso.
Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se precisar de um compilador melhor, só usar o ICC.
Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
OpenGL SDL, me encontro agora embrenhado na internet vendo se é
possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
extern ou algo do tipo.
On 18 jun, 09:29, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > operações com vetores até ai sem problemas.
> > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> Porém com o GCC
> você precisa ficar verificando o código gerado pois ele faz um péssimo
> serviço na alocação de registradores.
> Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
> e pode ficar ilegível,
> mas pode compensar, dependendo do caso.
> Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> precisar de um compilador
> melhor, só usar o ICC.
> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
> extern ou algo do tipo.
> On 18 jun, 09:29, Rodrigo Kumpera <kump...@gmail.com> wrote:
>> 2009/6/18 gabriel <newbie....@gmail.com>
>> > Olá pessoal, continuo com minhas experiências no desenvolvimento de
>> > jogos, e agora meti na venta de usar SSE para otimizar minhas
>> > operações com vetores até ai sem problemas.
>> > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
>> > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
>> > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
>> > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
>> Você pode usar os intrisincs para SSE que funciona em ambos compilados.
>> Porém com o GCC
>> você precisa ficar verificando o código gerado pois ele faz um péssimo
>> serviço na alocação de registradores.
>> Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
>> e pode ficar ilegível,
>> mas pode compensar, dependendo do caso.
>> Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
>> precisar de um compilador
>> melhor, só usar o ICC.
> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
> extern ou algo do tipo.
> On 18 jun, 09:29, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > operações com vetores até ai sem problemas.
> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> > Porém com o GCC
> > você precisa ficar verificando o código gerado pois ele faz um péssimo
> > serviço na alocação de registradores.
> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
> > e pode ficar ilegível,
> > mas pode compensar, dependendo do caso.
> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> > precisar de um compilador
> > melhor, só usar o ICC.
Você não precisa utilizar assembly para usar os comandos SSE, existem
intrisincs que podem ser utilizados e são padrões para ambos os
compiladores.
Por exemplo, ao invés de utilizar em assembly:
PAND xmm0, xmm1
você pode fazer o mesmo com intrisinc:
_mm_and_si128( var1, var2 );
Sacou?
Olhe na documentação oficial da Intel em
http://www.intel.com/products/processor/manuals/index.htm os
documentos Intel® 64 and IA-32 Architectures Software Developer's
Manual Volume 2A e 2B. Todas as instruções SSE possuem intrisincs
equivalentes para serem utilizadas em C. No final do volume 2B existe
uma tabela com todos esses intrincs.
> On 18 jun, 09:39, gabriel <newbie....@gmail.com> wrote:
>> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
>> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
>> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
>> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
>> extern ou algo do tipo.
>> On 18 jun, 09:29, Rodrigo Kumpera <kump...@gmail.com> wrote:
>> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
>> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
>> > > operações com vetores até ai sem problemas.
>> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
>> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
>> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
>> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
>> > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
>> > Porém com o GCC
>> > você precisa ficar verificando o código gerado pois ele faz um péssimo
>> > serviço na alocação de registradores.
>> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
>> > e pode ficar ilegível,
>> > mas pode compensar, dependendo do caso.
>> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
>> > precisar de um compilador
>> > melhor, só usar o ICC.
> Você não precisa utilizar assembly para usar os comandos SSE, existem
> intrisincs que podem ser utilizados e são padrões para ambos os
> compiladores.
> Por exemplo, ao invés de utilizar em assembly:
> PAND xmm0, xmm1
> você pode fazer o mesmo com intrisinc:
> _mm_and_si128( var1, var2 );
> Sacou?
> Olhe na documentação oficial da Intel emhttp://www.intel.com/products/processor/manuals/index.htmos > documentos Intel® 64 and IA-32 Architectures Software Developer's
> Manual Volume 2A e 2B. Todas as instruções SSE possuem intrisincs
> equivalentes para serem utilizadas em C. No final do volume 2B existe
> uma tabela com todos esses intrincs.
> > On 18 jun, 09:39, gabriel <newbie....@gmail.com> wrote:
> >> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
> >> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
> >> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
> >> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
> >> extern ou algo do tipo.
> >> On 18 jun, 09:29, Rodrigo Kumpera <kump...@gmail.com> wrote:
> >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> >> > > operações com vetores até ai sem problemas.
> >> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> >> > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> >> > Porém com o GCC
> >> > você precisa ficar verificando o código gerado pois ele faz um péssimo
> >> > serviço na alocação de registradores.
> >> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
> >> > e pode ficar ilegível,
> >> > mas pode compensar, dependendo do caso.
> >> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> >> > precisar de um compilador
> >> > melhor, só usar o ICC.
> hum...
> interessante já baixei a documentação
> mas uma dúvida isso tb val p/ o GCC ou só p/ o ICC?
> On 18 jun, 10:20, André Tupinambá <andre...@gmail.com> wrote:
> > Gabriel,
> > Você não precisa utilizar assembly para usar os comandos SSE, existem
> > intrisincs que podem ser utilizados e são padrões para ambos os
> > compiladores.
> > Por exemplo, ao invés de utilizar em assembly:
> > PAND xmm0, xmm1
> > você pode fazer o mesmo com intrisinc:
> > _mm_and_si128( var1, var2 );
> > Sacou?
> > Olhe na documentação oficial da Intel emhttp://www.intel.com/products/processor/manuals/index.htmos > > documentos Intel® 64 and IA-32 Architectures Software Developer's
> > Manual Volume 2A e 2B. Todas as instruções SSE possuem intrisincs
> > equivalentes para serem utilizadas em C. No final do volume 2B existe
> > uma tabela com todos esses intrincs.
> > > On 18 jun, 09:39, gabriel <newbie....@gmail.com> wrote:
> > >> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
> > >> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
> > >> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
> > >> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
> > >> extern ou algo do tipo.
> > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > >> > > operações com vetores até ai sem problemas.
> > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > >> > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> > >> > Porém com o GCC
> > >> > você precisa ficar verificando o código gerado pois ele faz um péssimo
> > >> > serviço na alocação de registradores.
> > >> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
> > >> > e pode ficar ilegível,
> > >> > mas pode compensar, dependendo do caso.
> > >> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> > >> > precisar de um compilador
> > >> > melhor, só usar o ICC.
> On 18 jun, 10:31, gabriel <newbie....@gmail.com> wrote:
>> hum...
>> interessante já baixei a documentação
>> mas uma dúvida isso tb val p/ o GCC ou só p/ o ICC?
>> On 18 jun, 10:20, André Tupinambá <andre...@gmail.com> wrote:
>> > Gabriel,
>> > Você não precisa utilizar assembly para usar os comandos SSE, existem
>> > intrisincs que podem ser utilizados e são padrões para ambos os
>> > compiladores.
>> > Por exemplo, ao invés de utilizar em assembly:
>> > PAND xmm0, xmm1
>> > você pode fazer o mesmo com intrisinc:
>> > _mm_and_si128( var1, var2 );
>> > Sacou?
>> > Olhe na documentação oficial da Intel emhttp://www.intel.com/products/processor/manuals/index.htmos >> > documentos Intel® 64 and IA-32 Architectures Software Developer's
>> > Manual Volume 2A e 2B. Todas as instruções SSE possuem intrisincs
>> > equivalentes para serem utilizadas em C. No final do volume 2B existe
>> > uma tabela com todos esses intrincs.
>> > > On 18 jun, 09:39, gabriel <newbie....@gmail.com> wrote:
>> > >> Abandonar o VC++ até que vai, namoro o ICC a um tempo mas não pretendo
>> > >> usar, e tem umas libs que são compiladas no GCC (Open Dynamics Engine)
>> > >> OpenGL SDL, me encontro agora embrenhado na internet vendo se é
>> > >> possivel compilar o que eu seja .asm no NASM ou GAS e depois usar como
>> > >> extern ou algo do tipo.
>> > >> > 2009/6/18 gabriel <newbie....@gmail.com>
>> > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
>> > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
>> > >> > > operações com vetores até ai sem problemas.
>> > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
>> > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
>> > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
>> > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
>> > >> > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
>> > >> > Porém com o GCC
>> > >> > você precisa ficar verificando o código gerado pois ele faz um péssimo
>> > >> > serviço na alocação de registradores.
>> > >> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas
>> > >> > e pode ficar ilegível,
>> > >> > mas pode compensar, dependendo do caso.
>> > >> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
>> > >> > precisar de um compilador
>> > >> > melhor, só usar o ICC.
você não pode fazer módulos específicos (algo como vetores-vc.cpp e
vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei
que, por um lado, isso dificulta a manutenção mas, por outro, isso
também pode ajudar no "fine tuning".
Olá pessoal, continuo com minhas experiências no desenvolvimento de
jogos, e agora meti na venta de usar SSE para otimizar minhas
operações com vetores até ai sem problemas.
Mas eu quero que meu código seja compilado no GCC e no Visual C++,
só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
Você pode usar os intrisincs para SSE que funciona em ambos compilados.
Porém com o GCC
você precisa ficar verificando o código gerado pois ele faz um péssimo
serviço na alocação de registradores.
Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
pacas e pode ficar ilegível,
mas pode compensar, dependendo do caso.
Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E
se precisar de um compilador
melhor, só usar o ICC.
> você não pode fazer módulos específicos (algo como vetores-vc.cpp e > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que, > por um lado, isso dificulta a manutenção mas, por outro, isso também pode > ajudar no "fine tuning".
> você não pode fazer módulos específicos (algo como vetores-vc.cpp e vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que, por um lado, isso dificulta a manutenção mas, por outro, isso também pode ajudar no "fine tuning".
> Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> Olá pessoal, continuo com minhas experiências no desenvolvimento de
> jogos, e agora meti na venta de usar SSE para otimizar minhas
> operações com vetores até ai sem problemas.
> Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> Obrigado.http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp... > Você pode usar os intrisincs para SSE que funciona em ambos compilados. Porém com o GCC
> você precisa ficar verificando o código gerado pois ele faz um péssimo serviço na alocação de registradores.
> Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho pacas e pode ficar ilegível,
> mas pode compensar, dependendo do caso.
> Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se precisar de um compilador
> melhor, só usar o ICC.
> Creio que isso seria o melhor pq eu tenho coisas como
> multiplicação de matrizes que o intrisincs não iria dar conta.
> vou meditar um pouco sobre o assunto.
> On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
> wrote:
> > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
> vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
> por um lado, isso dificulta a manutenção mas, por outro, isso também pode
> ajudar no "fine tuning".
> > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > operações com vetores até ai sem problemas.
> > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > Obrigado.
> http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp... > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> Porém com o GCC
> > você precisa ficar verificando o código gerado pois ele faz um péssimo
> serviço na alocação de registradores.
> > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
> pacas e pode ficar ilegível,
> > mas pode compensar, dependendo do caso.
> > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> precisar de um compilador
> > melhor, só usar o ICC.
// MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
takes
// advantage of Intel's SSE instructions. This version requires that
// M be in column-major order.
//
// Performance: 57 cycles/vector
void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
{
// Get a pointer to the elements of m
float *row0 = m.Ref();
// we'll store the final result in xmm2; initialize it
// to zero
xorps xmm2, xmm2
// broadcast x into xmm1, multiply it by the first
// column of the matrix (xmm4), and add it to the total
movups xmm1, xmm0
shufps xmm1, xmm1, 0x00
mulps xmm1, xmm4
addps xmm2, xmm1
// repeat the process for y, z and w
movups xmm1, xmm0
shufps xmm1, xmm1, 0x55
mulps xmm1, xmm5
addps xmm2, xmm1
movups xmm1, xmm0
shufps xmm1, xmm1, 0xAA
mulps xmm1, xmm6
addps xmm2, xmm1
movups xmm1, xmm0
shufps xmm1, xmm1, 0xFF
mulps xmm1, xmm7
addps xmm2, xmm1
// write the results to vout
movups [edi], xmm2
}
}
*****************
só achei que não daria pra fazer ese tipo de cosia com intrisincs
ai eu pensei em fazer tudo isso com o (g)as, e linkar
mais ai tem o maldito alinhamento, não sei como iria passar uma struct
typo {float x, float y,float z, float w};
talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
engraçar com uns livros de asm pra ver como vou fazer isso.
On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > Creio que isso seria o melhor pq eu tenho coisas como
> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > vou meditar um pouco sobre o assunto.
> > On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
> > wrote:
> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
> > por um lado, isso dificulta a manutenção mas, por outro, isso também pode
> > ajudar no "fine tuning".
> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > operações com vetores até ai sem problemas.
> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > > Obrigado.
> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> > Porém com o GCC
> > > você precisa ficar verificando o código gerado pois ele faz um péssimo
> > serviço na alocação de registradores.
> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
> > pacas e pode ficar ilegível,
> > > mas pode compensar, dependendo do caso.
> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> > precisar de um compilador
> > > melhor, só usar o ICC.
> // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> takes
> // advantage of Intel's SSE instructions. This version requires that
> // M be in column-major order.
> //
> // Performance: 57 cycles/vector
> void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> {
> // Get a pointer to the elements of m
> float *row0 = m.Ref();
> // we'll store the final result in xmm2; initialize it
> // to zero
> xorps xmm2, xmm2
> // broadcast x into xmm1, multiply it by the first
> // column of the matrix (xmm4), and add it to the total
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x00
> mulps xmm1, xmm4
> addps xmm2, xmm1
> // repeat the process for y, z and w
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x55
> mulps xmm1, xmm5
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xAA
> mulps xmm1, xmm6
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xFF
> mulps xmm1, xmm7
> addps xmm2, xmm1
> // write the results to vout
> movups [edi], xmm2
> }
> }
> *****************
> só achei que não daria pra fazer ese tipo de cosia com intrisincs
> ai eu pensei em fazer tudo isso com o (g)as, e linkar
> mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> typo {float x, float y,float z, float w};
> talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> engraçar com uns livros de asm pra ver como vou fazer isso.
> On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > > Creio que isso seria o melhor pq eu tenho coisas como
> > > multiplicação de matrizes que o intrisincs não iria dar conta.
> > > vou meditar um pouco sobre o assunto.
> > > On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
> > > wrote:
> > > > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
> > > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
> > > por um lado, isso dificulta a manutenção mas, por outro, isso também pode
> > > ajudar no "fine tuning".
> > > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> > > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > > operações com vetores até ai sem problemas.
> > > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> > > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> > > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > > > Obrigado.
> > >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> > > Porém com o GCC
> > > > você precisa ficar verificando o código gerado pois ele faz um péssimo
> > > serviço na alocação de registradores.
> > > > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
> > > pacas e pode ficar ilegível,
> > > > mas pode compensar, dependendo do caso.
> > > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> > > precisar de um compilador
> > > > melhor, só usar o ICC.
Eu aposto com você que não só dá pra fazer esse código com intrisincs,
como é capaz de ficar até mais rápido do que seu assembly feito na
mão.
Quando se usa intrisincs, o compilador faz a escolha dos registradores
e reordena as instruções para melhorar o desempenho. Além disso, o
mesmo fonte gera binários diferentes para 32 e 64bits, aproveitando o
maior número de registradores deste.
E depois de tudo, colocar intrisincs tem a vantagem de deixar o código
um pouco mais amigável ao desenvolvedor.
> // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> takes
> // advantage of Intel's SSE instructions. This version requires that
> // M be in column-major order.
> //
> // Performance: 57 cycles/vector
> void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> {
> // Get a pointer to the elements of m
> float *row0 = m.Ref();
> // we'll store the final result in xmm2; initialize it
> // to zero
> xorps xmm2, xmm2
> // broadcast x into xmm1, multiply it by the first
> // column of the matrix (xmm4), and add it to the total
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x00
> mulps xmm1, xmm4
> addps xmm2, xmm1
> // repeat the process for y, z and w
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x55
> mulps xmm1, xmm5
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xAA
> mulps xmm1, xmm6
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xFF
> mulps xmm1, xmm7
> addps xmm2, xmm1
> // write the results to vout
> movups [edi], xmm2
> }
> }
> *****************
> só achei que não daria pra fazer ese tipo de cosia com intrisincs
> ai eu pensei em fazer tudo isso com o (g)as, e linkar
> mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> typo {float x, float y,float z, float w};
> talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> engraçar com uns livros de asm pra ver como vou fazer isso.
> On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
>> Não iria dar conta porque?
>> > Creio que isso seria o melhor pq eu tenho coisas como
>> > multiplicação de matrizes que o intrisincs não iria dar conta.
>> > vou meditar um pouco sobre o assunto.
>> > On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
>> > wrote:
>> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
>> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
>> > por um lado, isso dificulta a manutenção mas, por outro, isso também pode
>> > ajudar no "fine tuning".
>> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
>> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
>> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
>> > > operações com vetores até ai sem problemas.
>> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
>> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
>> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
>> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
>> > > Obrigado.
>> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
>> > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
>> > Porém com o GCC
>> > > você precisa ficar verificando o código gerado pois ele faz um péssimo
>> > serviço na alocação de registradores.
>> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
>> > pacas e pode ficar ilegível,
>> > > mas pode compensar, dependendo do caso.
>> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
>> > precisar de um compilador
>> > > melhor, só usar o ICC.
> // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> takes
> // advantage of Intel's SSE instructions. This version requires that
> // M be in column-major order.
> //
> // Performance: 57 cycles/vector
> void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> {
> // Get a pointer to the elements of m
> float *row0 = m.Ref();
> // we'll store the final result in xmm2; initialize it
> // to zero
> xorps xmm2, xmm2
> // broadcast x into xmm1, multiply it by the first
> // column of the matrix (xmm4), and add it to the total
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x00
> mulps xmm1, xmm4
> addps xmm2, xmm1
> // repeat the process for y, z and w
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0x55
> mulps xmm1, xmm5
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xAA
> mulps xmm1, xmm6
> addps xmm2, xmm1
> movups xmm1, xmm0
> shufps xmm1, xmm1, 0xFF
> mulps xmm1, xmm7
> addps xmm2, xmm1
> // write the results to vout
> movups [edi], xmm2
> }
> }
> *****************
> só achei que não daria pra fazer ese tipo de cosia com intrisincs
> ai eu pensei em fazer tudo isso com o (g)as, e linkar
> mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> typo {float x, float y,float z, float w};
> talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> engraçar com uns livros de asm pra ver como vou fazer isso.
> On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
>> Não iria dar conta porque?
>> > Creio que isso seria o melhor pq eu tenho coisas como
>> > multiplicação de matrizes que o intrisincs não iria dar conta.
>> > vou meditar um pouco sobre o assunto.
>> > On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
>> > wrote:
>> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
>> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
>> > por um lado, isso dificulta a manutenção mas, por outro, isso também pode
>> > ajudar no "fine tuning".
>> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
>> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
>> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
>> > > operações com vetores até ai sem problemas.
>> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
>> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
>> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
>> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
>> > > Obrigado.
>> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
>> > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
>> > Porém com o GCC
>> > > você precisa ficar verificando o código gerado pois ele faz um péssimo
>> > serviço na alocação de registradores.
>> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
>> > pacas e pode ficar ilegível,
>> > > mas pode compensar, dependendo do caso.
>> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
>> > precisar de um compilador
>> > > melhor, só usar o ICC.
> > // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> > takes
> > // advantage of Intel's SSE instructions. This version requires that
> > // M be in column-major order.
> > //
> > // Performance: 57 cycles/vector
> > void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> > {
> > // Get a pointer to the elements of m
> > float *row0 = m.Ref();
> > // we'll store the final result in xmm2; initialize it
> > // to zero
> > xorps xmm2, xmm2
> > // broadcast x into xmm1, multiply it by the first
> > // column of the matrix (xmm4), and add it to the total
> > movups xmm1, xmm0
> > shufps xmm1, xmm1, 0x00
> > mulps xmm1, xmm4
> > addps xmm2, xmm1
> > // write the results to vout
> > movups [edi], xmm2
> > }
> > }
> > *****************
> > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > typo {float x, float y,float z, float w};
> > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > engraçar com uns livros de asm pra ver como vou fazer isso.
> > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> >> Não iria dar conta porque?
> >> > Creio que isso seria o melhor pq eu tenho coisas como
> >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> >> > vou meditar um pouco sobre o assunto.
> >> > On 18 jun, 15:00, Paulo Rogério Panhoto <pa...@voicetechnology.com.br>
> >> > wrote:
> >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp e
> >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)? Sei que,
> >> > por um lado, isso dificulta a manutenção mas, por outro, isso também pode
> >> > ajudar no "fine tuning".
> >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento de
> >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> >> > > operações com vetores até ai sem problemas.
> >> > > Mas eu quero que meu código seja compilado no GCC e no Visual C++,
> >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não gostaria pq
> >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> >> > > Obrigado.
> >> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> >> > > Você pode usar os intrisincs para SSE que funciona em ambos compilados.
> >> > Porém com o GCC
> >> > > você precisa ficar verificando o código gerado pois ele faz um péssimo
> >> > serviço na alocação de registradores.
> >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da trabalho
> >> > pacas e pode ficar ilegível,
> >> > > mas pode compensar, dependendo do caso.
> >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do VC++. E se
> >> > precisar de um compilador
> >> > > melhor, só usar o ICC.
> > > // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> > > takes
> > > // advantage of Intel's SSE instructions. This version requires that
> > > // M be in column-major order.
> > > //
> > > // Performance: 57 cycles/vector
> > > void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> > > {
> > > // Get a pointer to the elements of m
> > > float *row0 = m.Ref();
> > > // load v into xmm0.
> > > movups xmm0, [esi]
> > > // we'll store the final result in xmm2; initialize it
> > > // to zero
> > > xorps xmm2, xmm2
> > > // broadcast x into xmm1, multiply it by the first
> > > // column of the matrix (xmm4), and add it to the total
> > > movups xmm1, xmm0
> > > shufps xmm1, xmm1, 0x00
> > > mulps xmm1, xmm4
> > > addps xmm2, xmm1
> > > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > > typo {float x, float y,float z, float w};
> > > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > > engraçar com uns livros de asm pra ver como vou fazer isso.
> > > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > >> Não iria dar conta porque?
> > >> > Creio que isso seria o melhor pq eu tenho coisas como
> > >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > >> > vou meditar um pouco sobre o assunto.
> > >> > On 18 jun, 15:00, Paulo Rogério Panhoto <
> pa...@voicetechnology.com.br>
> > >> > wrote:
> > >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp
> e
> > >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)?
> Sei que,
> > >> > por um lado, isso dificulta a manutenção mas, por outro, isso também
> pode
> > >> > ajudar no "fine tuning".
> > >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento
> de
> > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > >> > > operações com vetores até ai sem problemas.
> > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual
> C++,
> > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não
> gostaria pq
> > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > >> > > Obrigado.
> http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > >> > > Você pode usar os intrisincs para SSE que funciona em ambos
> compilados.
> > >> > Porém com o GCC
> > >> > > você precisa ficar verificando o código gerado pois ele faz um
> péssimo
> > >> > serviço na alocação de registradores.
> > >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da
> trabalho
> > >> > pacas e pode ficar ilegível,
> > >> > > mas pode compensar, dependendo do caso.
> > >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do
> VC++. E se
> > >> > precisar de um compilador
> > >> > > melhor, só usar o ICC.
> > > > // load v into xmm0.
> > > > movups xmm0, [esi]
> > > > // we'll store the final result in xmm2; initialize it
> > > > // to zero
> > > > xorps xmm2, xmm2
> > > > // broadcast x into xmm1, multiply it by the first
> > > > // column of the matrix (xmm4), and add it to the total
> > > > movups xmm1, xmm0
> > > > shufps xmm1, xmm1, 0x00
> > > > mulps xmm1, xmm4
> > > > addps xmm2, xmm1
> > > > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > > > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > > > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > > > typo {float x, float y,float z, float w};
> > > > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > > > engraçar com uns livros de asm pra ver como vou fazer isso.
> > > > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > > >> Não iria dar conta porque?
> > > >> > Creio que isso seria o melhor pq eu tenho coisas como
> > > >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > > >> > vou meditar um pouco sobre o assunto.
> > > >> > On 18 jun, 15:00, Paulo Rogério Panhoto <
> > pa...@voicetechnology.com.br>
> > > >> > wrote:
> > > >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp
> > e
> > > >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)?
> > Sei que,
> > > >> > por um lado, isso dificulta a manutenção mas, por outro, isso também
> > pode
> > > >> > ajudar no "fine tuning".
> > > >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento
> > de
> > > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > >> > > operações com vetores até ai sem problemas.
> > > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual
> > C++,
> > > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não
> > gostaria pq
> > > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > > >> > > Obrigado.
> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > > >> > > Você pode usar os intrisincs para SSE que funciona em ambos
> > compilados.
> > > >> > Porém com o GCC
> > > >> > > você precisa ficar verificando o código gerado pois ele faz um
> > péssimo
> > > >> > serviço na alocação de registradores.
> > > >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da
> > trabalho
> > > >> > pacas e pode ficar ilegível,
> > > >> > > mas pode compensar, dependendo do caso.
> > > >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do
> > VC++. E se
> > > >> > precisar de um compilador
> > > >> > > melhor, só usar o ICC.
Se a sintaxe AT&T te incomoda você pode usar a seguinte diretiva pra usar
sintaxe Intel. É útil se você já tem experiência com Nasm e afins, mas não
sei se tem alguma restrição fazendo isso. Vale uma pesquisada.
> > > // MatrixMultiply3 -- a C++/ASM version of MatrixMultiply2, which
> > > takes
> > > // advantage of Intel's SSE instructions. This version requires that
> > > // M be in column-major order.
> > > //
> > > // Performance: 57 cycles/vector
> > > void MatrixMultiply3(Matrix4f &m, Vector4f *vin, Vector4f *vout)
> > > {
> > > // Get a pointer to the elements of m
> > > float *row0 = m.Ref();
> > > // load v into xmm0.
> > > movups xmm0, [esi]
> > > // we'll store the final result in xmm2; initialize it
> > > // to zero
> > > xorps xmm2, xmm2
> > > // broadcast x into xmm1, multiply it by the first
> > > // column of the matrix (xmm4), and add it to the total
> > > movups xmm1, xmm0
> > > shufps xmm1, xmm1, 0x00
> > > mulps xmm1, xmm4
> > > addps xmm2, xmm1
> > > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > > typo {float x, float y,float z, float w};
> > > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > > engraçar com uns livros de asm pra ver como vou fazer isso.
> > > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > >> Não iria dar conta porque?
> > >> > Creio que isso seria o melhor pq eu tenho coisas como
> > >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > >> > vou meditar um pouco sobre o assunto.
> > >> > On 18 jun, 15:00, Paulo Rogério Panhoto <
> pa...@voicetechnology.com.br>
> > >> > wrote:
> > >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp
> e
> > >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)?
> Sei que,
> > >> > por um lado, isso dificulta a manutenção mas, por outro, isso também
> pode
> > >> > ajudar no "fine tuning".
> > >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento
> de
> > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > >> > > operações com vetores até ai sem problemas.
> > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual
> C++,
> > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não
> gostaria pq
> > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > >> > > Obrigado.
> http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > >> > > Você pode usar os intrisincs para SSE que funciona em ambos
> compilados.
> > >> > Porém com o GCC
> > >> > > você precisa ficar verificando o código gerado pois ele faz um
> péssimo
> > >> > serviço na alocação de registradores.
> > >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da
> trabalho
> > >> > pacas e pode ficar ilegível,
> > >> > > mas pode compensar, dependendo do caso.
> > >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do
> VC++. E se
> > >> > precisar de um compilador
> > >> > > melhor, só usar o ICC.
andei vendo como éssa coisa toda funciona
adição subtração multiplicação de vetores foi tranquilo
ai pensei bom vamos começar a ver como eu vou fazer com a minhas
matrizes ai
fiz o seguinte teste
isso foi só um teste pra ver como funciona, agora vou fazer as
multiplicações de matrizes e tals,
vi um script em perl que converte nasm p/ c inline, ai com makefiles
config.h e um arquivo pro GCC e outro VC++
minha vida fica resolvida.
tenho um código de rasterização 3D em C puro, vou ver c migro o mesmo.
mais bom obrigado pela ajuda.
ps: é má idéia postar o progresso pode ser que ajude mais alguém.
On 19 jun, 13:25, Ziviani <jrzivi...@gmail.com> wrote:
> Se a sintaxe AT&T te incomoda você pode usar a seguinte diretiva pra usar
> sintaxe Intel. É útil se você já tem experiência com Nasm e afins, mas não
> sei se tem alguma restrição fazendo isso. Vale uma pesquisada.
> > > > // load v into xmm0.
> > > > movups xmm0, [esi]
> > > > // we'll store the final result in xmm2; initialize it
> > > > // to zero
> > > > xorps xmm2, xmm2
> > > > // broadcast x into xmm1, multiply it by the first
> > > > // column of the matrix (xmm4), and add it to the total
> > > > movups xmm1, xmm0
> > > > shufps xmm1, xmm1, 0x00
> > > > mulps xmm1, xmm4
> > > > addps xmm2, xmm1
> > > > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > > > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > > > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > > > typo {float x, float y,float z, float w};
> > > > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > > > engraçar com uns livros de asm pra ver como vou fazer isso.
> > > > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > > >> Não iria dar conta porque?
> > > >> > Creio que isso seria o melhor pq eu tenho coisas como
> > > >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > > >> > vou meditar um pouco sobre o assunto.
> > > >> > On 18 jun, 15:00, Paulo Rogério Panhoto <
> > pa...@voicetechnology.com.br>
> > > >> > wrote:
> > > >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp
> > e
> > > >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)?
> > Sei que,
> > > >> > por um lado, isso dificulta a manutenção mas, por outro, isso também
> > pode
> > > >> > ajudar no "fine tuning".
> > > >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento
> > de
> > > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > >> > > operações com vetores até ai sem problemas.
> > > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual
> > C++,
> > > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não
> > gostaria pq
> > > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > > >> > > Obrigado.
> >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > > >> > > Você pode usar os intrisincs para SSE que funciona em ambos
> > compilados.
> > > >> > Porém com o GCC
> > > >> > > você precisa ficar verificando o código gerado pois ele faz um
> > péssimo
> > > >> > serviço na alocação de registradores.
> > > >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da
> > trabalho
> > > >> > pacas e pode ficar ilegível,
> > > >> > > mas pode compensar, dependendo do caso.
> > > >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do
> > VC++. E se
> > > >> > precisar de um compilador
> > > >> > > melhor, só usar o ICC.
> andei vendo como éssa coisa toda funciona
> adição subtração multiplicação de vetores foi tranquilo
> ai pensei bom vamos começar a ver como eu vou fazer com a minhas
> matrizes ai
> fiz o seguinte teste
> isso foi só um teste pra ver como funciona, agora vou fazer as
> multiplicações de matrizes e tals,
> vi um script em perl que converte nasm p/ c inline, ai com makefiles
> config.h e um arquivo pro GCC e outro VC++
> minha vida fica resolvida.
> tenho um código de rasterização 3D em C puro, vou ver c migro o mesmo.
> mais bom obrigado pela ajuda.
> ps: é má idéia postar o progresso pode ser que ajude mais alguém.
> On 19 jun, 13:25, Ziviani <jrzivi...@gmail.com> wrote:
> > Se a sintaxe AT&T te incomoda você pode usar a seguinte diretiva pra usar
> > sintaxe Intel. É útil se você já tem experiência com Nasm e afins, mas não
> > sei se tem alguma restrição fazendo isso. Vale uma pesquisada.
> > > > > // load v into xmm0.
> > > > > movups xmm0, [esi]
> > > > > // we'll store the final result in xmm2; initialize it
> > > > > // to zero
> > > > > xorps xmm2, xmm2
> > > > > // broadcast x into xmm1, multiply it by the first
> > > > > // column of the matrix (xmm4), and add it to the total
> > > > > movups xmm1, xmm0
> > > > > shufps xmm1, xmm1, 0x00
> > > > > mulps xmm1, xmm4
> > > > > addps xmm2, xmm1
> > > > > só achei que não daria pra fazer ese tipo de cosia com intrisincs
> > > > > ai eu pensei em fazer tudo isso com o (g)as, e linkar
> > > > > mais ai tem o maldito alinhamento, não sei como iria passar uma struct
> > > > > typo {float x, float y,float z, float w};
> > > > > talvez eu pudesse passar um ponteiro, de qq jeito vou ter que me
> > > > > engraçar com uns livros de asm pra ver como vou fazer isso.
> > > > > On 18 jun, 15:20, Rodrigo Kumpera <kump...@gmail.com> wrote:
> > > > >> Não iria dar conta porque?
> > > > >> 2009/6/18 gabriel <newbie....@gmail.com>
> > > > >> > Creio que isso seria o melhor pq eu tenho coisas como
> > > > >> > multiplicação de matrizes que o intrisincs não iria dar conta.
> > > > >> > vou meditar um pouco sobre o assunto.
> > > > >> > On 18 jun, 15:00, Paulo Rogério Panhoto <
> > > pa...@voicetechnology.com.br>
> > > > >> > wrote:
> > > > >> > > você não pode fazer módulos específicos (algo como vetores-vc.cpp
> > > e
> > > > >> > vetores-gcc.cpp), cada um no seu respectivo makefile (ou projeto)?
> > > Sei que,
> > > > >> > por um lado, isso dificulta a manutenção mas, por outro, isso também
> > > pode
> > > > >> > ajudar no "fine tuning".
> > > > >> > > Rodrigo Kumpera wrote:2009/6/18 gabriel<newbie....@gmail.com>
> > > > >> > > Olá pessoal, continuo com minhas experiências no desenvolvimento
> > > de
> > > > >> > > jogos, e agora meti na venta de usar SSE para otimizar minhas
> > > > >> > > operações com vetores até ai sem problemas.
> > > > >> > > Mas eu quero que meu código seja compilado no GCC e no Visual
> > > C++,
> > > > >> > > só que um usa a syntax Intel e a outra AT&T, e eu pretendia usar
> > > > >> > > inline asm. o que poderia fazer? matar o Visual C++ eu não
> > > gostaria pq
> > > > >> > > é uma bela IDE, mas a plataforma base é Linux. tem algumas dicas?
> > > > >> > > Obrigado.
> > >http://www.neilkemp.us/v4/articles/sse_tutorial/sse_tutorial.htmlhttp...
> > > > >> > > Você pode usar os intrisincs para SSE que funciona em ambos
> > > compilados.
> > > > >> > Porém com o GCC
> > > > >> > > você precisa ficar verificando o código gerado pois ele faz um
> > > péssimo
> > > > >> > serviço na alocação de registradores.
> > > > >> > > Tem a opção de programar usando macros p/ disfarçar o asm. Da
> > > trabalho
> > > > >> > pacas e pode ficar ilegível,
> > > > >> > > mas pode compensar, dependendo do caso.
> > > > >> > > Ou, por fim, você pode usar o GCC com todos SOs e desistir do
> > > VC++. E se
> > > > >> > precisar de um compilador
> > > > >> > > melhor, só usar o ICC.