鱼C论坛

 找回密码
 立即注册
查看: 4167|回复: 16

vs里面用的 MMX指令集

[复制链接]
发表于 2017-6-14 17:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)                                                
asm  psubusb     mm0, csMMX_16_b      
asm        psubsw      mm1, csMMX_128_w      
asm  movq        mm7, mm0
asm        psubsw      mm2, csMMX_128_w   
..............
为什么总是提示 "语法错误__asm"    哪位大神告诉我怎么写  mmx指令集啊 在vs2015里面   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-14 18:54:53 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        __int16 csMMX_16_b;

        __asm
        {
                psubusb     mm0, csMMX_16_b
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 14:53:53 | 显示全部楼层

哦,,,那么我这段改怎么该?
#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) 应该怎么处理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 16:17:40 | 显示全部楼层
人造人 发表于 2017-6-15 15:27
你能确定这个define 是正确的吗
#define YUV422ToRGB32_MMX(out_RGB_reg,WriteCode)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 16:18:53 | 显示全部楼层

这是 一段完整的   
#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 : [out_RGB_reg -- out_RGB_reg+8*4]                 */                                /
                                                                                                 /
          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 [0-255] */ /
          asm   packuswb    mm2,mm6               /* mm2 = R7 R5 R3 R1 B7 B5 B3 B1 to [0-255] */ /
          asm   packuswb    mm5,mm1               /* mm5 = G6 G4 G2 G0 G7 G5 G3 G1 to [0-255] */ /
          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   [out_RGB_reg],mm0                                                    /
          asm   movq        mm7,mm4                                                              /
          asm   punpckhbw   mm6,mm5             /* mm6 = G7 B7 G6 B6 G5 B5 G4 B4       */        /
          asm   WriteCode   [out_RGB_reg+8],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  [out_RGB_reg+8*2],mm6                                                 /
          asm   WriteCode  [out_RGB_reg+8*3],mm0   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 17:12:52 | 显示全部楼层

这不是一个完整的 带参数宏定义吧
http://c.biancheng.net/cpp/html/66.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 17:24:52 | 显示全部楼层
人造人 发表于 2017-6-15 17:12
这不是一个完整的 带参数宏定义吧
http://c.biancheng.net/cpp/html/66.html

是一个  define的多行定义   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 17:38:28 | 显示全部楼层
panhui123 发表于 2017-6-15 17:24
是一个  define的多行定义

后面不应该是 /
应该是 \ 吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 17:38:53 | 显示全部楼层
你哪来的这个代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-16 09:30:15 | 显示全部楼层
人造人 发表于 2017-6-15 17:38
你哪来的这个代码?

http://blog.csdn.net/housisong/article/details/1866970
这里找的部分代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-16 12:51:54 | 显示全部楼层
panhui123 发表于 2017-6-15 17:24
是一个  define的多行定义

他续行符是写错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-16 13:47:45 | 显示全部楼层
人造人 发表于 2017-6-16 12:51
他续行符是写错了?

改成 “\” 还是提示  语法错误“__asm”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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\
。。。。。}这样也不行。。 郁闷啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[2];
__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 : [out_RGB_reg -- out_RGB_reg+8*4]                 */                                \
\
__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 [0-255] */ \
__asm   packuswb    mm2, mm6               /* mm2 = R7 R5 R3 R1 B7 B5 B3 B1 to [0-255] */ \
__asm   packuswb    mm5, mm1               /* mm5 = G6 G4 G2 G0 G7 G5 G3 G1 to [0-255] */ \
__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[out_RGB_reg], mm0 \
__asm   movq        mm7, mm4 \
__asm   punpckhbw   mm6, mm5             /* mm6 = G7 B7 G6 B6 G5 B5 G4 B4       */ \
__asm   WriteCode[out_RGB_reg + 8], 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[out_RGB_reg + 8 * 2], mm6 \
__asm   WriteCode[out_RGB_reg + 8 * 3], mm0

int main(void)
{
        int x;

        YUV422ToRGB32_MMX(x, movq);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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“第二操作数”中的内联汇编语法错误;找到“[”          这是咋回事。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-16 15:25:10 | 显示全部楼层
panhui123 发表于 2017-6-16 14:30
多谢,,,现在是改好了    主要又有这么个问题了,,关于这段  
        loop_beign :
                        YUYV_Loader_MMX(ea ...

代码发完整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-3 06:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表