首页 > 其他分享 >【ARMv8/ARMv9 硬件加速系列 2.2 -- ARM NEON 的加减乘除(左移右移)运算】

【ARMv8/ARMv9 硬件加速系列 2.2 -- ARM NEON 的加减乘除(左移右移)运算】

时间:2024-06-21 12:27:33浏览次数:11  
标签:右移 0x00000000 16 -- mov v0 w0 硬件加速 x0

文章目录

NEON 加减乘除

下面代码是使用ARMv8汇编语言对向量寄存器v0-v31执行加、减、乘以及左移和右移操作的示例。
ARMv8的SIMD指令集允许对向量寄存器中的多个数据进行并行操作。v0v1加载数据,对它们进行加、减和乘,左移和右移操作。最后,我们会将结果存储到内存地址0xb0000000处, 方便观察结果。

func neon_calc_test
    stp	    x29, x30, [sp, #-0x10 * 1]!

    // add
    mov w0, #0x1111
    mov v0.s[0], w0
    mov v1.s[0], w0
    fadd v2.4s, v0.4s, v1.4s    // v2 = v0 + v1

    // sub
    mov w0, #0x2222
    mov v0.s[0], w0
    mov w0, #0x1111
    mov v1.s[0], w0
    fsub v3.4s, v0.4s, v1.4s    // v3 = v0 - v1

    // multi
    mov w0, #0xf
    mov v0.s[0], w0
    mov w0, #0x11
    mov v1.s[0], w0
    mul v4.4s, v0.4s, v1.4s    // v4 = v0 * v1

    // left shift
    movi v0.4s, #0xff
    shl v5.4s, v0.4s, #1        // v5 = v2 << 1 (每个元素左移1位)

    // right shift
    movi v0.4s, #0xff
    srshr v6.4s, v0.4s, #1        // v6 = v3 >> 1 (每个元素右移1位)

    mov x0, xzr
    ldr x0, =0xb0000000
    st1 {v2.4s}, [x0], #16    // 发送v2到内存,并将x0增加16
    st1 {v3.4s}, [x0], #16    // 发送v3到内存,并将x0增加16
    st1 {v4.4s}, [x0], #16    // 发送v4到内存,并将x0增加16
    st1 {v5.4s}, [x0], #16    // 发送v5到内存,并将x0增加16
    st1 {v6.4s}, [x0]         // 发送v6到内存
    ldp x29, x30, [sp], #0x10
    ret
endfunc neon_calc_test
  • 首先,我们使用fadd, fsub, 和 mul指令对浮点数进行加、减、乘操作,结果分别存储在v2, v3, 和 v4中。
  • 然后,使用shlsrshr指令对整数进行左移和右移操作,结果存储在v5v6中。
  • 最后,我们使用st1指令将结果依次写入到内存地址0x87000000处。

请注意,st1指令使用了后置更新地址的写法,每次存储后都会更新x0寄存器的值,为下一次存储准备。

测试结果

msh >dump 0xb0000000 20
0xb0000000: 0x00002222 0x00000000 0x00000000 0x00000000
0xb0000010: 0x00001111 0x00000000 0x00000000 0x00000000
0xb0000020: 0x000000ff 0x00000000 0x00000000 0x00000000
0xb0000030: 0x000001fe 0x000001fe 0x000001fe 0x000001fe
0xb0000040: 0x00000080 0x00000080 0x00000080 0x00000080

标签:右移,0x00000000,16,--,mov,v0,w0,硬件加速,x0
From: https://blog.csdn.net/sinat_32960911/article/details/139782763

相关文章

  • rabbitMQ实战生产者-交换机-队列-消费者细谈
     生产者rabbitmq的配置创建交换机,创建queue,绑定交换机的routingkey到queue一,默认的exchange列表 二,将exchange的routingkey绑定到queue 三,生产端关心消息将发放哪个交换机,哪个routingkey,也可以用通配符(如calc.*,calc.#)匹配相应的routingkey mq服务匹配exchange,rout......
  • 解锁测试管理的核心问题,提升你的管理实力!
    如何打造积极向上,主动,执行力强,不推诿,不甩锅,服从安排,和谐,互帮互助的团队?如何有效的追踪团队的测试效率,后续对测试时间,质量等评估做支持?作为测试管理的你,是不是会遇到各种问题,不知道如何处理?霍格沃兹测试开发学社于本周六组织了测试管理圆桌讨论会 。本次邀请了多位名企测试管理......
  • ssh
    最初是在找mac上的ssh软件,但看到一个用iterm和sshconfig的设置常规配置正常设置Host*Port22ServerAliveInterval120HosttargetHostName$HOSTPort$PORTIdentityFile~/.ssh/id_rsaUser$USER$分别指代自己对应的端口号、用户名等等......
  • 对于react的 <outlet />的理解
    先贴代码layouts文件夹里面有一个文件index.tsx1import{Link,Outlet}from'umi';2importstylesfrom'./index.less';34exportdefaultfunctionLayout(){5return(6<divclassName={styles.navs}>7<ul>8......
  • 算法合集
    算法合集这里是我的算法合集:博弈论Gametheory图论Graphtheory数论Numbertheory三角函数Trigonometricfunction字符串Strings计算几何Computationgeometry数据结构Structs动态规划DynamicprogrammingLIS问题LongestIncreasingSubsequenceproble......
  • 免费远程关机的方法,下载ToDesk轻松搞定
    当你用完远程控制软件后,想要远程给被控电脑关机,或是到点下班离开公司,但电脑还需要开机完成剩余的工作,那要如何才能身在远处,简单快速的让电脑关机?小社长最近发现ToDesk远控软件就能解决这个难题,远程关机超级方便!这个功能可以让你远程控制结束后直接进行远程关机,在手机电脑上都可......
  • recastnavigation.Sample_TempObstacles代码注解 - rcBuildHeightfieldLayers
    烘培代码在rcBuildHeightfieldLayers本质上是为每个tile生成高度上的不同layer算法的关键是三层循环:forz轴循环forx轴循环for高度span循环判断span和相邻span的连通性(x/z平面相邻cell)如果联通,则标注为同一个layer,也就是在x/z平面上标注layer,形成像是互不相......
  • ToDesk勾上摄像头会看到我吗?如何关闭摄像头
    ToDesk远程控制软件除了能跨系统跨设备进行远控连接外,其实还有很多实用的小功能在日常生活派上用场。就比如远程摄像头,可以用来远程查看被控电脑的环境情况,用来监控家里宠物和小孩的情况等等。可能很多小伙伴使用的时候会顾虑,远程开启摄像头后是否会看到主控端的本人?如何关闭......
  • Excel日期函数
    Excel提供了丰富的日期和时间函数,可以满足各种日期相关的需求。以下是一些常用的Excel日期和时间函数:获取当天日期:TODAY()函数返回当前日期获取日期时间:NOW()函数返回当前日期和时间计算日期差:DATEDIF(start_date,end_date,unit)函数计算两个日期之间......
  • IIS应用程序回收导致应用中Hangfire等后台任务无法正常启动工作的解决方法
    一些解释这个锅的确是IIS的,我不冤枉它:1)应用程序池在回收时,将删除正在运行的工作进程,然后再次启动它。2)正如定义所指出的,如果您设置“AlwaysRunning”,则在IIS启动或创建应用程序池时,立即启动应用程序池的工作进程。OnDemand->IIS将在接收到Web应用程序的第一个请求时启动工......