vec_sld 字节序敏感吗?

2023-11-29

我正在开发具有核心加密功能的 PowerPC 机器。我在使用内置函数将 AES 密钥扩展从大端移植到小端时遇到问题。大端有效,但小端无效。

下面的算法是一个片段中呈现的IBM 博客文章。我认为我已将问题隔离到下面的第 2 行:

typedef __vector unsigned char  uint8x16_p8;
uint8x64_p8 r0 = {0};

r3 = vec_perm(r1, r1, r5);       /* line  1 */
r6 = vec_sld(r0, r1, 12);        /* line  2 */
r3 = vcipherlast(r3, r4);        /* line  3 */

r1 = vec_xor(r1, r6);            /* line  4 */
r6 = vec_sld(r0, r6, 12);        /* line  5 */
r1 = vec_xor(r1, r6);            /* line  6 */
r6 = vec_sld(r0, r6, 12);        /* line  7 */
r1 = vec_xor(r1, r6);            /* line  8 */
r4 = vec_add(r4, r4);            /* line  9 */

// r1 is ready for next round
r1 = vec_xor(r1, r3);            /* line 10 */

进入函数后,大端和小端都有以下参数:

(gdb) p r1
$1 = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88,
  0x9, 0xcf, 0x4f, 0x3c}
(gdb) p r5
$2 = {0xd, 0xe, 0xf, 0xc, 0xd, 0xe, 0xf, 0xc, 0xd, 0xe, 0xf, 0xc, 0xd, 0xe,
  0xf, 0xc}

然而,执行完第2行后,r6具有以下值:

小端机:

(gdb) p r6
$3 = {0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x9, 0xcf, 0x4f, 0x3c,
  0x0, 0x0, 0x0, 0x0}

(gdb) p $vs0
$3 = {uint128 = 0x8815f7aba6d2ae28000000003c4fcf09, v2_double = {
    4.9992689728788323e-315, -1.0395462025288474e-269}, v4_float = {
    0.0126836384, 0, -1.46188823e-15, -4.51291888e-34}, v4_int32 = {
    0x3c4fcf09, 0x0, 0xa6d2ae28, 0x8815f7ab}, v8_int16 = {0xcf09, 0x3c4f, 0x0,
    0x0, 0xae28, 0xa6d2, 0xf7ab, 0x8815}, v16_int8 = {0x9, 0xcf, 0x4f, 0x3c,
    0x0, 0x0, 0x0, 0x0, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88}}

大端机:

(gdb) p r6
$4 = {0x0, 0x0, 0x0, 0x0, 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
  0xab, 0xf7, 0x15, 0x88}

请注意小端机器上的奇数旋转。

当我在第 2 行执行后在小端机器上反汇编时:

 (gdb) disass $pc
 <skip multiple pages>

    0x0000000010000dc8 <+168>:   lxvd2x  vs12,r31,r9
    0x0000000010000dcc <+172>:   xxswapd vs12,vs12
    0x0000000010000dd0 <+176>:   xxlor   vs32,vs0,vs0
    0x0000000010000dd4 <+180>:   xxlor   vs33,vs12,vs12
    0x0000000010000dd8 <+184>:   vsldoi  v0,v0,v1,12
    0x0000000010000ddc <+188>:   xxlor   vs0,vs32,vs32
    0x0000000010000de0 <+192>:   xxswapd vs0,vs0
    0x0000000010000de4 <+196>:   li      r9,64
    0x0000000010000de8 <+200>:   stxvd2x vs0,r31,r9
 => 0x0000000010000dec <+204>:   li      r9,48
    0x0000000010000df0 <+208>:   lxvd2x  vs0,r31,r9
    0x0000000010000df4 <+212>:   xxswapd vs34,vs0

(gdb) p $v0
$5 = void

(gdb) p $vs0
$4 = {uint128 = 0x8815f7aba6d2ae28000000003c4fcf09, v2_double = {
    4.9992689728788323e-315, -1.0395462025288474e-269}, v4_float = {
    0.0126836384, 0, -1.46188823e-15, -4.51291888e-34}, v4_int32 = {
    0x3c4fcf09, 0x0, 0xa6d2ae28, 0x8815f7ab}, v8_int16 = {0xcf09, 0x3c4f, 0x0,
    0x0, 0xae28, 0xa6d2, 0xf7ab, 0x8815}, v16_int8 = {0x9, 0xcf, 0x4f, 0x3c,
    0x0, 0x0, 0x0, 0x0, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88}}

我不知道为什么r6不是期望值。理想情况下,我会检查两台机器上的 vsx 寄存器。不幸的是,GDB 在两台机器上也都有问题,所以我无法做诸如反汇编和打印向量寄存器之类的事情。

Is vec_sld字节序敏感吗?或者还有什么问题吗?


使用 PowerPC/AltiVec 的小端序有时会有点令人费解 - 如果您需要使代码同时支持大端序和小端序,那么定义一些可移植性宏会有所帮助,例如为了vec_sld:

#ifdef __BIG_ENDIAN__
  #define VEC_SLD(va, vb, shift) vec_sld(va, vb, shift)
#else
  #define VEC_SLD(va, vb, shift) vec_sld(vb, va, 16 - (shift))
#endif

您可能会发现这对于涉及水平/位置操作或缩小/扩大的所有内在函数很有帮助,例如vec_merge, vec_pack et al, vec_unpack, vec_perm, vec_mule/vec_mulo, vec_splat, vec_lvsl/vec_lvsr, etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vec_sld 字节序敏感吗? 的相关文章

  • 如何自定义 DataTable 列的排序

    我需要对数据表列的值进行排序 该列包含字符串 整数或混合文本 例如 数据表列包含如下值 23 18 12 store 23 store a1 1283 25 如果我使用对值进行排序Dataview sort 方法会按此顺序产生 12 128
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 浮点提升:stroustrup vs 编译器 - 谁是对的?

    在 Stroustrup 的新书 C 编程语言 第四版 第 10 5 1 节中 他说 在执行算术运算之前 整数提升用于从较短的整数类型创建整数 类似地 浮点提升是用于从浮点数创建双精度数 我用以下代码确认了第一个声明 include
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 通过 MSBuild 调用 cl.exe 时无限期挂起

    我正在尝试在我的 主要是 C 项目上运行 MSBuild 想象一下一个非常庞大的代码库 Visual Studio 2015 是有问题的工具集 Windows 7 SP1 和 VS 2015 更新 2 即使使用 m 1 从而迫使它仅使用一个
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • Visual Studio Express 2012 for Desktop 中没有 Metro 项目模板?

    两个下载页面桌面版 and 对于 Windows 8提供相同的 Web 安装程序 名为 Visual Studio Express 2012 for Windows Desktop 我安装了它 这是它的 新项目 窗口 In 本教程页面 它说
  • 如何使用 Accessstoken 通过图 api 向 Facebook 好友发送消息

    任何人都可以帮助我使用 graph api 向 Facebook 好友发送消息 I tried response facebook gt call api me feed post to john message You have a Te
  • Visual Studio:如何显示从基类继承的所有类?

    在 Visual Studio 中 如何显示从基类继承的所有类 例如 在 ASP NET MVC 中有几个 动作结果 类型 它们都继承 实现基类ActionResult 看起来除非你只是 知道 View and Json有效ActionRe
  • GZip 压缩在 IIS 7.5 上不起作用

    我试图在 IIS 下支持静态文件的 GZip 压缩 默认情况下应该启用 但没有 但到目前为止还没有工作 这是下面的部分
  • 如何在 Java 中通过引用传递可变参数

    我正在编写一个方法 该方法接收任意数量的参数并返回修改后的参数 我尝试过使用 varargs 但它不起作用 在这里您可以看到代码的简化版本 public static void main String args String hello h
  • 为 Flexbox 列表设置固定间距

    i noticed that on my firefox the distance between the bottom of the website and the list for links terms about is really
  • 这是聚合吗?

    我有以下代码 public static void main String args Engine engine new Engine This Engine Car b new Car engine b null 这是聚合吗 我一直认为聚
  • pgrep -P,但对于孙子而不仅仅是孩子

    我在用 pgrep P 获取 的子进程 pid 但我实际上也想要一份孙子和曾孙的名单 我该怎么做呢 例如 使用常规编程语言 我们会使用递归来做到这一点 但是使用 bash 呢 也许使用 bash 函数 我已经发布了尝试解决方案 它简短而有效
  • uwp InkCanvas 将斯托克斯保存为 svg

    我正在尝试将 InkCanvas InkStorkes 保存为 SVG 我发现之前的一个问题适用于 Wpf 但我无法让它与 uwp 一起使用 Wpf InkCanvas 将斯托克斯保存为 svg 我对其进行了一些更改 但遇到了 GetGro
  • 如何将 simulink 文件转换为 XML

    我需要将 Simulink 文件 mdl 转换为 XML 文件 经过任何搜索后 我没有找到任何内容来帮助我解决此问题 您知道 Java 中的某种方法或现成的解决方案吗 从 R2008b 开始 您可以使用以下命令将 mdl 文件导出到 xml
  • Angular 表单 - 访问子组件模板中的 FormArray

    我有一个需要几个组件FormControls and FormArrays 作为输入 我正在访问FormControl来自子组件的 s 如下所示 formControl control 这工作得很好 但我找不到一种方法来做同样的事情Form
  • 将 dd/mm/yy 和 dd/mm/yyyy 转换为日期

    我有一些字符向量 其中包含各种格式的日期 如下所示 dates lt c 23 11 12 20 10 2012 22 10 2012 23 11 12 我想将它们转换为日期 我已经尝试了 lubridate 包中非常好的 dmy 但这不起
  • 手动对整数列表进行排序

    我对编程还很陌生 我只学习了几个星期的Python 最近有人给我一个练习 要求我生成一个整数列表 然后在单独的列表中手动将数字从最低到最高排序 import random unordered list range 10 ordered lo
  • 虚拟 COM 端口还是使用原始端点?

    我正在使用 USB 控制器和代码示例在微控制器中开发软件来实现虚拟 COM 端口 它的实现是一个来回传输数据的设备 我正在考虑使用 2 个批量端点 在我的计算机中使用 libusb 来读取和写入它们 虚拟 COM 的优点是不需要 libus
  • 通过 Outlook 在 R 中发送电子邮件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在 R 中通过 Outlook 发送电子邮件 所有的例子sendmailR使用 Gmail 服务器 但我不能这样做 您可以使用RDCOMClient包从 R 中访问 COM
  • SQL Server LocalDB 实例无法启动(自动)

    我有一个 WPF 应用程序连接到 SQL Server 2014 Express LocalDB 即本地数据库 mdf数据库文件 该应用程序使用 Entity Framework Core 库版本 7 0 0 rc1 final 这是我正在
  • JsonConstructor 在 IEnumerable 属性上失败?

    因此 使用访问器设置可枚举效果非常好 public class SetEnumerableWithAccessor public IEnumerable
  • React 中使用鼠标滚轮缩放图像

    所以我正在尝试重制这个版本 取自并修改自这个帖子 在 React 中使用鼠标滚轮进行图像缩放 问题是 即使在 React 中使用相同的数学和逻辑 它也不能完美地工作 我不知道为什么 图像似乎没有在光标所在的位置缩放 这是我的组件 impor
  • 如何使用saxon内置目录功能

    我下载了 SaxonHE9 4 0 6J 并希望在 CLI 上处理 XHTML 然而 Saxon 尝试从 W3C 加载 DTD 并且每个简单命令都需要花费太多时间 我有 xml 目录 我通过设置指向目录文件的 env 变量成功地将其与 xm
  • vec_sld 字节序敏感吗?

    我正在开发具有核心加密功能的 PowerPC 机器 我在使用内置函数将 AES 密钥扩展从大端移植到小端时遇到问题 大端有效 但小端无效 下面的算法是一个片段中呈现的IBM 博客文章 我认为我已将问题隔离到下面的第 2 行 typedef