SSE指令进行 shuffle_bytes (RGBA 转 BGRA)"

问题描述

MMX, SSE指令进行 shuffle_bytes (RGBA 转 BGRA)

如何用MMX,SSE进行RGBA转BGRA?
算法如下,我不会用C语言写。麻烦高手实现以下。
假定2快连续内存 src 和 dst

  1. src 的 每个DWORD(32位)与 0x00FF00FF进行与操作 放到 dst
  2. src 的 每个DWORD(32位)与 0xFF00FF00进行与操作 放到 B
  3. 对于 B 的个DWORD(32位)进行循环左移8位,
  4. 对于 B 的每个WORD(16位) 进行循环左移8位,
  5. 最后 B+dst
    比如:
    0xAABBCCDD 转换为 0xCCBBAADDB
    第一步 dts 为 0x00BB00DD
    第一步 B 为 0xAA00CC00
    第一步 B 为 0x00CC00AA
    第一步 B 为 0xCC00AA00
    追后 dst+B 为 0xCCBBAADD
时间: 2024-11-20 18:57:52

SSE指令进行 shuffle_bytes (RGBA 转 BGRA)"的相关文章

代码-关于SSE指令和NEON指令之间的关系

问题描述 关于SSE指令和NEON指令之间的关系 现在我有一套含有SSE指令集的代码,现在想把SSE指令的部分换成NEON指令,想实现相同的功能,但是我对这两个指令集都不太懂,然后一堆指令看到我都晕了,所以希望大神们可以教教我这两个指令之间的相似性和不同,或者怎么学习这两种指令集,好让我能改这套代码,感激不尽! 解决方案 直接翻译指令代码是移植了,可是性能没有移植过去.因为不同架构各自优化的方法和策略不同. 你的思路是看懂sse代码,写出伪c的算法代码,然后再优化对应平台的机器代码.前一个步骤也

Pentium III处理器的单指令多数据流扩展指令(3)

概要 : 随着Intel Pentium III处理器的发布,给程序设计人员又带来了许多新的特性.利用这些新特性,程序员可以为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的许多新特性,可以使她能够比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特性包括一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这些新的指令集就像Pentium II在经典Pentium的基础上添加的MMX

Pentium III处理器的单指令多数据流扩展指令(1)

关键字 : Pentium,处理器,单指令多数据流扩展指令,SSE,指令集 概要 : 随着Intel Pentium III处理器的发布,给程序设计人员又带来了许多新的特性.利用这些新特性,程序员可以为用户创造出更好的产品. Pentium III和Pentium III Xeon(至强处理器)的许多新特性,可以使她能够比Pentium II和Pentium II Xeon处理器有更快的运行速度,这些新特性包括一个处理器序列号(unique processor ID)和新增SSE处理器指令集,这

基于SSE指令集的程序设计简介

Intel公司的单指令多数据流式扩展(SSE,Streaming SIMD Extensions)技术能够有效增强CPU浮点运算的能力.Visual Studio .NET 2003提供了对SSE指令集的编程支持,从而允许用户在C++代码中不用编写汇编代码就可直接使用SSE指令的功能.MSDN中有关SSE技术的主题[1]有可能会使不熟悉使用SSE汇编指令编程的初学者感到困惑,但是在阅读MSDN有关文档的同时,参考一下Intel软件说明书(Intel Software manuals)[2]会使你

状态机-如何用SSE intrinsics function来实现fsm的vectorization

问题描述 如何用SSE intrinsics function来实现fsm的vectorization 30C 本人近来在学习有限状态机及它的并行处理(或者说矢量化),因为需要用到sse指令,所以想请教一下,怎么运用sse指令来实现fsm的vectorization(暂不需要考虑数据的dependence)我的主要困惑是:1,怎么对输入流分块?2,sse指令没有能够处理fsm的状态转移的函数,这个要怎么办? 新人一枚,希望诸位指教-

ART世界探险(5) - 计算指令

ART世界探险(5) - 计算指令 整数运算 Java的整型运算 我们先看看JVM是如何处理这些基本整数运算的吧. public static long add(long a, long b){ return a+b; } public static long sub(long a,long b){ return a-b; } public static long mul(long a, long b){ return a*b; } public static long div(long a,l

基于锁的原子操作

本文翻译自<英特尔 64 和 IA-32 架构软件开发人员手册>卷三"系统编程指南"的第八章"多处理器的管理"的第一节 译者:方腾飞 8.1 基于锁的原子操作 32位IA-32处理器的系统内存地址支持基于锁的原子操作.这些操作通常用于管理共享的数据结构(如信号量,段描述符,系统段,或页表),在这些数据结构里,两个或多个处理器可以尝试同时修改相同的字段或标志.处理器使用三个相互关联的机制来实现基于锁的原子操作: 保证在单处理器下该操作是原子操作. 总线锁定

用Visual C++优化代码

摘要:本文介绍了Visual C++ .NET 2003产品中提供的代码优化功能.此外,对于那些还不熟悉 Visual C++ .NET 2002 中进行的改进的读者,本文还用一个较短的部分介绍了在这一改进中引入的新的"全程序优化"功能.最后,本文讨论了一些与优化有关的"最佳策略",以及对 Visual C++ 编译器进行的一般性增强. 简介 虽然得到了一种新的工具,但对于自己是否以可能的最佳方式使用它没有把握,这总是一件令人感到沮丧的事情.该白皮书试图减少您对 V

Viusal C++.NET的优化代码

前言 人们在使用一个新的编程工具时总会感到缺乏自信,本文试图让你对VC的代码优化有更直观的感觉,希望你能通过阅读本文从VC中"得到"更多的东西. Visual C++ .NET 2003 VC.NET 2003不仅带来了两个新的优化选项,它还改进了VC.NET 2002中一些优化的性能. 第一个新增选项是"/G7",它告诉编译器对Intel Pentium 4和AMD Athlon处理器进行优化. 使用"/G7"选项编译的程序,当我们和VC.NE