panhui123 发表于 2017-6-14 17:15:25

vs里面用的 MMX指令集

#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                                                
asmpsubusb   mm0, csMMX_16_b      
asm        psubsw      mm1, csMMX_128_w      
asmmovq      mm7, mm0
asm        psubsw      mm2, csMMX_128_w   
..............
为什么总是提示 "语法错误__asm"    哪位大神告诉我怎么写mmx指令集啊 在vs2015里面   

人造人 发表于 2017-6-14 18:54:53

#include <stdio.h>

int main(void)
{
        __int16 csMMX_16_b;

        __asm
        {
                psubusb   mm0, csMMX_16_b
        }

        return 0;
}

panhui123 发表于 2017-6-15 14:53:53

人造人 发表于 2017-6-14 18:54


哦,,,那么我这段改怎么该?
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                                                
__asm{
    psubusb   mm0, csMMX_16_b      
      psubsw      mm1, csMMX_128_w      
   movq      mm7, mm0
    psubsw      mm2, csMMX_128_w   
..............}么? 好像不对 ,#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode) 应该怎么处理

人造人 发表于 2017-6-15 15:27:33

panhui123 发表于 2017-6-15 14:53
哦,,,那么我这段改怎么该?
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                     ...

你能确定这个define 是正确的吗
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)

panhui123 发表于 2017-6-15 16:17:40

人造人 发表于 2017-6-15 15:27
你能确定这个define 是正确的吗
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)

panhui123 发表于 2017-6-15 16:18:53

panhui123 发表于 2017-6-15 16:17


这是 一段完整的   
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                                                 /
   /*input :mm0 = Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0    */                                                /
   /*         mm1 = 00 u3 00 u2 00 u1 00 u0    */                                                /
   /*         mm2 = 00 v3 00 v2 00 v1 00 v0    */                                                /
   /*output :                */                              /
                                                                                                 /
          asm   psubusb   mm0,csMMX_16_b      /* mm0 : Y -= 16                     */      /
          asm   psubsw      mm1,csMMX_128_w       /* mm1 : u -= 128                      */      /
          asm   movq      mm7,mm0                                                            /
          asm   psubsw      mm2,csMMX_128_w       /* mm2 : v -= 128                      */      /
          asm   pand      mm0,csMMX_0x00FF_w    /* mm0 = 00 Y6 00 Y4 00 Y2 00 Y0       */      /
          asm   psllw       mm1,3               /* mm1 : u *= 8                        */      /
          asm   psllw       mm2,3               /* mm2 : v *= 8                        */      /
          asm   psrlw       mm7,8               /* mm7 = 00 Y7 00 Y5 00 Y3 00 Y1       */      /
          asm   movq      mm3,mm1                                                            /
          asm   movq      mm4,mm2                                                            /
                                                                                                 /
          asm   pmulhw      mm1,csMMX_U_green_w   /* mm1 = u * U_green                   */      /
          asm   psllw       mm0,3               /* y*=8                              */      /
          asm   pmulhw      mm2,csMMX_V_green_w   /* mm2 = v * V_green                   */      /
          asm   psllw       mm7,3               /* y*=8                              */      /
          asm   pmulhw      mm3,csMMX_U_blue_w                                                   /
          asm   paddsw      mm1,mm2                                                            /
          asm   pmulhw      mm4,csMMX_V_red_w                                                    /
          asm   movq      mm2,mm3                                                            /
          asm   pmulhw      mm0,csMMX_Y_coeff_w                                                /
          asm   movq      mm6,mm4                                                            /
          asm   pmulhw      mm7,csMMX_Y_coeff_w                                                /
          asm   movq      mm5,mm1                                                            /
          asm   paddsw      mm3,mm0               /* mm3 = B6 B4 B2 B0       */                  /
          asm   paddsw      mm2,mm7               /* mm2 = B7 B5 B3 B1       */                  /
          asm   paddsw      mm4,mm0               /* mm4 = R6 R4 R2 R0       */                  /
          asm   paddsw      mm6,mm7               /* mm6 = R7 R5 R3 R1       */                  /
          asm   paddsw      mm1,mm0               /* mm1 = G6 G4 G2 G0       */                  /
          asm   paddsw      mm5,mm7               /* mm5 = G7 G5 G3 G1       */                  /
                                                                                                 /
          asm   packuswb    mm3,mm4               /* mm3 = R6 R4 R2 R0 B6 B4 B2 B0 to */ /
          asm   packuswb    mm2,mm6               /* mm2 = R7 R5 R3 R1 B7 B5 B3 B1 to */ /
          asm   packuswb    mm5,mm1               /* mm5 = G6 G4 G2 G0 G7 G5 G3 G1 to */ /
          asm   movq      mm4,mm3                                                            /
          asm   punpcklbw   mm3,mm2               /* mm3 = B7 B6 B5 B4 B3 B2 B1 B0   */      /
          asm   punpckldq   mm1,mm5               /* mm1 = G7 G5 G3 G1 xx xx xx xx   */      /
          asm   punpckhbw   mm4,mm2               /* mm4 = R7 R6 R5 R4 R3 R2 R1 R0   */      /
          asm   punpckhbw   mm5,mm1               /* mm5 = G7 G6 G5 G4 G3 G2 G1 G0   */      /
                                                                                                 /
                /*out*/                                                                        /
          asm   pcmpeqb   mm2,mm2               /* mm2 = FF FF FF FF FF FF FF FF   */      /
                                                                                                 /
          asm   movq      mm0,mm3                                                            /
          asm   movq      mm7,mm4                                                            /
          asm   punpcklbw   mm0,mm5             /* mm0 = G3 B3 G2 B2 G1 B1 G0 B0       */      /
          asm   punpcklbw   mm7,mm2             /* mm7 = FF R3 FF R2 FF R1 FF R0       */      /
          asm   movq      mm1,mm0                                                            /
          asm   movq      mm6,mm3                                                            /
          asm   punpcklwd   mm0,mm7             /* mm0 = FF R1 G1 B1 FF R0 G0 B0       */      /
          asm   punpckhwd   mm1,mm7             /* mm1 = FF R3 G3 B3 FF R2 G2 B2       */      /
          asm   WriteCode   ,mm0                                                    /
          asm   movq      mm7,mm4                                                            /
          asm   punpckhbw   mm6,mm5             /* mm6 = G7 B7 G6 B6 G5 B5 G4 B4       */      /
          asm   WriteCode   ,mm1                                                /
          asm   punpckhbw   mm7,mm2             /* mm7 = FF R7 FF R6 FF R5 FF R4      */         /
          asm   movq      mm0,mm6                                                            /
          asm   punpcklwd   mm6,mm7             /* mm6 = FF R5 G5 B5 FF R4 G4 B4      */         /
          asm   punpckhwd   mm0,mm7             /* mm0 = FF R7 G7 B7 FF R6 G6 B6      */         /
          asm   WriteCode,mm6                                                 /
          asm   WriteCode,mm0   

人造人 发表于 2017-6-15 17:12:52

panhui123 发表于 2017-6-15 16:17


这不是一个完整的 带参数宏定义吧
http://c.biancheng.net/cpp/html/66.html

panhui123 发表于 2017-6-15 17:24:52

人造人 发表于 2017-6-15 17:12
这不是一个完整的 带参数宏定义吧
http://c.biancheng.net/cpp/html/66.html

是一个define的多行定义   

人造人 发表于 2017-6-15 17:38:28

panhui123 发表于 2017-6-15 17:24
是一个define的多行定义

后面不应该是 /
应该是 \ 吧?

人造人 发表于 2017-6-15 17:38:53

你哪来的这个代码?

panhui123 发表于 2017-6-16 09:30:15

人造人 发表于 2017-6-15 17:38
你哪来的这个代码?

http://blog.csdn.net/housisong/article/details/1866970
这里找的部分代码

人造人 发表于 2017-6-16 12:51:54

panhui123 发表于 2017-6-15 17:24
是一个define的多行定义

他续行符是写错了?

panhui123 发表于 2017-6-16 13:47:45

人造人 发表于 2017-6-16 12:51
他续行符是写错了?

改成 “\” 还是提示语法错误“__asm”

panhui123 发表于 2017-6-16 13:58:03

人造人 发表于 2017-6-16 12:51
他续行符是写错了?

#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)\
__asm
{   psubusb   mm0, csMMX_16_b\
      psubsw      mm1, csMMX_128_w\
   movq      mm7, mm0\
。。。。。}这样也不行。。 郁闷啊

人造人 发表于 2017-6-16 14:11:29

panhui123 发表于 2017-6-16 13:58
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)\
__asm
{   psubusb   mm0, csMMX_16_b\


注意,这只是我改到能编译通过,肯定还有其他问题
#include <stdio.h>

__int16 csMMX_16_b;
__int64 csMMX_128_w;
__int16 csMMX_0x00FF_w;
__int16 csMMX_U_green_w;
__int16 csMMX_V_green_w;
__int16 csMMX_U_blue_w;
__int16 csMMX_V_red_w;
__int16 csMMX_Y_coeff_w;

#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                                                 \
/*input :mm0 = Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0    */                                                \
/*         mm1 = 00 u3 00 u2 00 u1 00 u0    */                                                \
/*         mm2 = 00 v3 00 v2 00 v1 00 v0    */                                                \
/*output :                */                              \
\
__asm   psubusb   mm0, csMMX_16_b      /* mm0 : Y -= 16                     */ \
__asm   psubsw      mm1, csMMX_128_w       /* mm1 : u -= 128                      */ \
__asm   movq      mm7, mm0 \
__asm   psubsw      mm2, csMMX_128_w       /* mm2 : v -= 128                      */ \
__asm   pand      mm0, csMMX_0x00FF_w    /* mm0 = 00 Y6 00 Y4 00 Y2 00 Y0       */ \
__asm   psllw       mm1, 3               /* mm1 : u *= 8                        */ \
__asm   psllw       mm2, 3               /* mm2 : v *= 8                        */ \
__asm   psrlw       mm7, 8               /* mm7 = 00 Y7 00 Y5 00 Y3 00 Y1       */ \
__asm   movq      mm3, mm1 \
__asm   movq      mm4, mm2                                                            \
\
__asm   pmulhw      mm1, csMMX_U_green_w   /* mm1 = u * U_green                   */ \
__asm   psllw       mm0, 3               /* y*=8                              */ \
__asm   pmulhw      mm2, csMMX_V_green_w   /* mm2 = v * V_green                   */ \
__asm   psllw       mm7, 3               /* y*=8                              */ \
__asm   pmulhw      mm3, csMMX_U_blue_w \
__asm   paddsw      mm1, mm2 \
__asm   pmulhw      mm4, csMMX_V_red_w \
__asm   movq      mm2, mm3 \
__asm   pmulhw      mm0, csMMX_Y_coeff_w \
__asm   movq      mm6, mm4 \
__asm   pmulhw      mm7, csMMX_Y_coeff_w \
__asm   movq      mm5, mm1 \
__asm   paddsw      mm3, mm0               /* mm3 = B6 B4 B2 B0       */ \
__asm   paddsw      mm2, mm7               /* mm2 = B7 B5 B3 B1       */ \
__asm   paddsw      mm4, mm0               /* mm4 = R6 R4 R2 R0       */ \
__asm   paddsw      mm6, mm7               /* mm6 = R7 R5 R3 R1       */ \
__asm   paddsw      mm1, mm0               /* mm1 = G6 G4 G2 G0       */ \
__asm   paddsw      mm5, mm7               /* mm5 = G7 G5 G3 G1       */                  \
\
__asm   packuswb    mm3, mm4               /* mm3 = R6 R4 R2 R0 B6 B4 B2 B0 to */ \
__asm   packuswb    mm2, mm6               /* mm2 = R7 R5 R3 R1 B7 B5 B3 B1 to */ \
__asm   packuswb    mm5, mm1               /* mm5 = G6 G4 G2 G0 G7 G5 G3 G1 to */ \
__asm   movq      mm4, mm3 \
__asm   punpcklbw   mm3, mm2               /* mm3 = B7 B6 B5 B4 B3 B2 B1 B0   */ \
__asm   punpckldq   mm1, mm5               /* mm1 = G7 G5 G3 G1 xx xx xx xx   */ \
__asm   punpckhbw   mm4, mm2               /* mm4 = R7 R6 R5 R4 R3 R2 R1 R0   */ \
__asm   punpckhbw   mm5, mm1               /* mm5 = G7 G6 G5 G4 G3 G2 G1 G0   */      \
\
/*out*/                                                                        \
__asm   pcmpeqb   mm2, mm2               /* mm2 = FF FF FF FF FF FF FF FF   */      \
\
__asm   movq      mm0, mm3 \
__asm   movq      mm7, mm4 \
__asm   punpcklbw   mm0, mm5             /* mm0 = G3 B3 G2 B2 G1 B1 G0 B0       */ \
__asm   punpcklbw   mm7, mm2             /* mm7 = FF R3 FF R2 FF R1 FF R0       */ \
__asm   movq      mm1, mm0 \
__asm   movq      mm6, mm3 \
__asm   punpcklwd   mm0, mm7             /* mm0 = FF R1 G1 B1 FF R0 G0 B0       */ \
__asm   punpckhwd   mm1, mm7             /* mm1 = FF R3 G3 B3 FF R2 G2 B2       */ \
__asm   WriteCode, mm0 \
__asm   movq      mm7, mm4 \
__asm   punpckhbw   mm6, mm5             /* mm6 = G7 B7 G6 B6 G5 B5 G4 B4       */ \
__asm   WriteCode, mm1 \
__asm   punpckhbw   mm7, mm2             /* mm7 = FF R7 FF R6 FF R5 FF R4      */ \
__asm   movq      mm0, mm6 \
__asm   punpcklwd   mm6, mm7             /* mm6 = FF R5 G5 B5 FF R4 G4 B4      */ \
__asm   punpckhwd   mm0, mm7             /* mm0 = FF R7 G7 B7 FF R6 G6 B6      */ \
__asm   WriteCode, mm6 \
__asm   WriteCode, mm0

int main(void)
{
        int x;

        YUV422ToRGB32_MMX(x, movq);

        return 0;
}

panhui123 发表于 2017-6-16 14:30:04

人造人 发表于 2017-6-16 14:11
注意,这只是我改到能编译通过,肯定还有其他问题

多谢,,,现在是改好了    主要又有这么个问题了,,关于这段
        loop_beign :
                        YUYV_Loader_MMX(eax + ecx * 2)
                        YUV422ToRGB32_MMX(edx + ecx * 4,movq)

提示
错误        C2400“第二操作数”中的内联汇编语法错误;找到“newline”       

错误        C2400“第二操作数”中的内联汇编语法错误;找到“[”          这是咋回事。。。。

人造人 发表于 2017-6-16 15:25:10

panhui123 发表于 2017-6-16 14:30
多谢,,,现在是改好了    主要又有这么个问题了,,关于这段
        loop_beign :
                        YUYV_Loader_MMX(ea ...

代码发完整
页: [1]
查看完整版本: vs里面用的 MMX指令集