x264中的avg_w8函数汇编实现

函数参数说明:

dst 结果存储地址, i_dst 存储结果的linesize

src1 计算源数据地址1,i_src1 计算源数据linesize

src2 计算源数据地址2, i_src2 计算源数据linesize

一 对应的c语言实现

static inline void pixel_avg2_w8_altivec( uint8_t *dst,  intptr_t i_dst,uint8_t *src1, intptr_t i_src1,uint8_t *src2, int i_height )
{//r0 dst r1 i_dst
//r2 src1, r3 i_src1
//r4 src2 r5 heightvec_u8_t src1v, src2v;for( int y = 0; y < i_height; y++ ){#if 0src1v = vec_vsx_ld( 0, src1 );src2v = vec_vsx_ld( 0, src2 );src1v = vec_avg( src1v, src2v );VEC_STORE8(src1v, dst);#endiffor (int i = 0; i < 8; i++) { //每一行计算8个值的平均值dst[i] = (src1[i] + src2[i]) >> 1;}dst  += i_dst;src1 += i_src1;src2 += i_src1;}
}

二 汇编函数实现

function pixel_avg2_w8_neonldr         ip,  [sp, #4] //保存 ip = *(sp + 4)  heightpush        {lr} //要压栈的寄存器列表ldr         lr,  [sp, #4] //lr = *(sp + 4)   src2
avg2_w8_loop: //process 128 bits per timesubs        ip,  ip,  #2 // ip = ip - 2vld1.64     {d0}, [r2], r3 //从r2 + r3 位置加载64bit 到 d0vld1.64     {d2}, [lr], r3 //从lr + r3 位置加载64 bits到 d2vrhadd.u8   d0,  d0,  d2 //d0 = d0(uint8) + d2(uint8)vld1.64     {d1}, [r2], r3 //从 r2 + r3 位置加载64bits到 d1vld1.64     {d3}, [lr], r3 //从 lr + r3 位置加载64bits到 d3vrhadd.u8   d1,  d1,  d3 //d1 = d1(uint8) + d3(uint8)vst1.64     {d0}, [r0,:64], r1 // r1 + r0 = *d0vst1.64     {d1}, [r0,:64], r1 // r1 + r0 + 64 = *d1bgt         avg2_w8_looppop         {pc}
endfunc

arm环境下,寄存器传递参数有4个,寄存器r0,r1,r2,r3 。一共可以到r11。

其它的都是入栈。

入栈都是反向入栈的,最后的参数最先入栈

ldr ip, [sp, #4]. 最后一个参数height

ldr lr, [sp, #4] 倒数第二个参数src2

其它代码看注释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app中代理的两种配置方式

方式一: 在项目的 manifest.json 文件中点击 源码视图 在最底部的vue版本下编写代理代码 方式二: 在项目中创建 vue.config.js 文件然后进行配置 在页面中发起请求 完整的url&#xff1a;http://c.m.163.com/recommend/getChanListNews?channelT1457068979049&size10 …

Django的mysql数据库问题:同一个模型(同一张表)中的不同记录也是可以相互关联的【使用“自引用关系”】

01-在Django的mysql数据库中&#xff0c;同一模型中的不同记录是不是也是可以相互关联&#xff1f; 是的&#xff0c;确实可以在Django的模型中使用外键来建立同一模型中不同记录之间的关联关系。这样的关联关系被称为自引用关系&#xff08;self-referential relationship&am…

【Leetcode】269.火星词典(Hard)

一、题目 1、题目描述 现有一种使用英语字母的火星语言,这门语言的字母顺序与英语顺序不同。 给你一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序…

Spark SQL函数定义

目录 窗口函数 SQL函数分类 Spark原生自定义UDF函数 Pandas的UDF函数 Apache Arrow框架基本介绍 基于Arrow完成Pandas DataFrame和Spark DataFrame互转 基于Pandas完成UDF函数 自定义UDF函数 自定义UDAF函数 窗口函数 分析函数 over(partition by xxx order by xxx [as…

嵌入式开发--STM32G4系列片上FLASH的读写

这个玩意吧&#xff0c;说起来很简单&#xff0c;就是几行代码的事&#xff0c;但楞是折腾了我大半天时间才搞定。原因后面说&#xff0c;先看代码吧&#xff1a; 读操作 读操作很简单&#xff0c;以32位方式读取的时候是这样的&#xff1a; data *(__IO uint32_t *)(0x080…

Python GUI库大汇总

所有程序都是基于命令行的&#xff0c;这些程序可能只有一些“专业”的计算机人士才会使用。例如前面编写的五子棋等程序&#xff0c;恐怕只有程序员自己才愿意玩这么“糟糕”的游戏&#xff0c;很少有最终用户愿意对着黑乎乎的命令行界面敲命令。 相反&#xff0c;如果为程序…

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时&#xff0c;又出现“管理员邮件确认”的提示&#xff0c;要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示&#xff1a; 如果点击“稍后提醒我”&#xff0c;那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

[C++] opencv - Mat::convertTo函数介绍和使用场景

Mat::convertTo()函数 Converts an array to another data type with optional scaling. 该函数主要用于数据类型的相互转换。 The method converts source pixel values to the target data type. saturate_cast<> is applied at the end to avoid possible overf…

Pytest应用PO设计模式

Pytest应用PO设计模式 本篇内容主要涉及在软件测试中实现PO设计模式的应用 包含PO思想、PO原则、PO使用方法&#xff0c;最后会写一个实际模板供大家参考。 一、PO思想 ​ PO(PageObject)&#xff0c;在UI页面测试时&#xff0c;通常会存在大量的页面元素和各种点击操作&#…

坚持刷题 | 二叉树的层序遍历

坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷&#xff1a;二叉树的层序遍历 题目 102二叉树的层序遍历 考察点 数据结构基础&#xff1a; 能够正确地使用二叉树数据结构&#xff0c;并了解二叉树的基本性质。编程基础&#xff1a; 能够熟练使用Java编程语言&a…

【NewSQL】-- 分布式数据库 TiDB 和 CockroachDB

一、基本描述 1、TiDB 国产骄傲。从2015年开始&#xff0c;至今已8年&#xff0c;当前最新版本是7.5.x。TiDB 开源分布式 NewSQL 关系型数据库 是新一代开源分布式 NewSQL 数据库&#xff0c;模型受 Google Spanner / F1 论文的启发&#xff0c;实现了自动的水平伸缩&#xff…

win/ubuntu/mac 卸载 安装 docker 命令

1 卸载 参见 Docker 官网: mac /Applications/Docker.app/Contents/MacOS/uninstall卸载Docker Desktop后&#xff0c;可能会留下一些可以删除的剩余文件&#xff1a;rm -rf ~/Library/Group\ Containers/group.com.docker rm -rf ~/Library/Containers/com.docker.docker r…

网络编程【1】

【 1 】什么是网络编程 网络编程是指通过计算机网络进行数据交换和通信的编程过程。它涉及到使用网络协议和通信接口&#xff0c;使不同计算机之间能够进行数据传输和通信。 总结&#xff1a; 网络编程的研究前提就是基于互联网 网络编程就是基于互联网写代码 【 2 】为什么…

Qt编程之仿gnome-terminal终端样式 +颜色文字显示

Qt仿linux 终端样式 颜色文字 1.说再多废话不如直接show code2.实现效果 本文采用QTextBrowser作为文本显示窗口&#xff0c;进行文本的显示。本文实例实现的效果并没有终端的输入效果&#xff0c;这里只是提供一些仿终端样式思路。 1.说再多废话不如直接show code 1.ui文件…

0间隔24h采集线报+源码的资源网

一款网站程序零间隔24h采集线报源码的资源网&#xff0c;更新下载类目的采集 及 导入&#xff0c;这款网站程序&#xff1a;jizhiCMS 高仿新版某刀资源网模板进行自动采集。 安装方法&#xff1a; 将根目录文件上传服务器 将根目录文件的sql.sql导入mysql数据库 环境需要支…

【刷题】 leetcode 2 .两数相加

两数相加 两数相加1 思路一 &#xff08;暴毙版&#xff09;2 思路二 &#xff08;本质出发&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 两数相加 我们来看…

【Spring Boot 3】【Redis】分布式锁

【Spring Boot 3】【Redis】分布式锁 背景介绍开发环境开发步骤及源码工程目录结构总结 背景 软件开发是一门实践性科学&#xff0c;对大多数人来说&#xff0c;学习一种新技术不是一开始就去深究其原理&#xff0c;而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经…

逆向使用webpack打包的网站

webpack webpack 是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源&#xff08;图片、js文件、css文件等&#xff09;都看成模块&#xff0c;通过loader&#xff08;加载器&#xff09;和 plugins &#xff08;插件&#xff09;对资源进行处理&#xff0c;打包成符…

Stack详解(Java)

Stack Java 中的 Stack 是一种基于后进先出&#xff08;LIFO&#xff09;原则的数据结构。Stack 类实现了一个标准的堆栈&#xff0c;它继承自 Vector 类&#xff0c;并提供了一些额外的方法来支持堆栈的操作。 下面是一些 Java Stack 类的详细解释&#xff1a; 构造方法&…