日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[armv9]-ARM最新架构为memcpy/memset底层的实现提供新的指令

發布時間:2025/3/21 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [armv9]-ARM最新架构为memcpy/memset底层的实现提供新的指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引流關鍵詞:CPY CPYM CPYP CPYE SET SETP SETM SETE,memcpy,memset,armv9

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


思考
1、memcpy/memset的底層是如何實現的?一個一個字節的操作嗎? 可不可以四個四個字節操作呢?
2、若干年后再來回答問題1,是不是有新的方法了呢?

在大多數的[操作]系統中,memcpy()、memset()等函數的實現,其實都一個字節一個字節的處理。翻譯成匯編后無非就算循環執行ldr、str指令

memcpy的底層實現:

_PTR _DEFUN(memcpy, (dst0, src0, len0), _PTR dst0 _AND _CONST _PTR src0 _ANDsize_t len0) { #if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)char *dst = (char *)dst0;char *src = (char *)src0;_PTR save = dst0;while (len0--)*dst++ = *src++;return save; }

memset的底層實現:

(optee_os/lib/libutils/isoc/newlib/memset.c)_PTR _DEFUN(memset, (m, c, n), _PTR m _AND int c _AND size_t n) {char *s = (char *)m;#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) ......#endif /* not PREFER_SIZE_OVER_SPEED */while (n--)*s++ = (char)c;return m;}

翻譯成匯編后:

000000000e1469b8 <memset>: memset(): /home/test/workspace/code/optee/optee_os/lib/libutils/isoc/newlib/memset.c:125e1469b8: d2800003 mov x3, #0x0 // #0e1469bc: eb03005f cmp x2, x3e1469c0: 54000041 b.ne e1469c8 <memset+0x10> // b.any /home/test/workspace/code/optee/optee_os/lib/libutils/isoc/newlib/memset.c:129e1469c4: d65f03c0 ret /home/test/workspace/code/optee/optee_os/lib/libutils/isoc/newlib/memset.c:126e1469c8: 38236801 strb w1, [x0, x3]e1469cc: 91000463 add x3, x3, #0x1e1469d0: 17fffffb b e1469bc <memset+0x4>

這些函數在一般的軟件中會經常使用,所以它們的性能尤其重要。
在ARM最新的架構中(armv9)提出了優化這些性能的方式(FEAT_MOPS),即:增加了一些指令來做這件事

總結

以上是生活随笔為你收集整理的[armv9]-ARM最新架构为memcpy/memset底层的实现提供新的指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。