gpt4 book ai didi

objective-c - 为什么 gcc 或 clang 不能正确地@encode SIMD 矢量类型?

转载 作者:太空狗 更新时间:2023-10-30 03:33:37 26 4
gpt4 key购买 nike

在处理向量类型和 ObjC 运行时时,我遇到了一个非常令人困惑的问题。

据我所知,clang 或 GCC 都不会为任何 SIMD 向量类型提供“正确”的类型编码。

#import <Foundation/Foundation.h>

int main() {
typedef int int4 __attribute__((vector_size(16)));
typedef float float4 __attribute__((vector_size(16)));

NSLog(@"Int4: %s", @encode(int4));
NSLog(@"Float4: %s", @encode(float4));
}

当使用 GCC 或 clang 编译和运行时,我得到以下输出:

2014-04-09 06:21:01.102 test[1707:507] Int4:2014-04-09 06:21:01.103 test[1707:507] Float4:

Instead of what I expect, which would be something like this:

2014-04-09 06:21:01.102 test[1707:507] Int4: ![16,16i]2014-04-09 06:21:01.103 test[1707:507] Float4: ![16,16f]

As per the documentation here:

vectors      ‘![’ followed by the vector_size (the number of bytes composing the vector) followed by a comma, followed by the alignment (in bytes) of the vector, followed by the type of the elements followed by ‘]’

Which becomes a problem when attempting to return these types from an ObjC method, as instead of getting something logical like ![16,16i]@: for the encoding of the following method:

-(int4) foo;

我只得到字符串 @:,这导致 NSMethodSignatureNSInvocation 基本上都是废话和段错误。

我可以启用一些编译器选项来恢复矢量类型的正确编码吗?或者这里唯一的解决方案是“不要从 ObjC 方法返回向量”?

注意:返回(或传递)指向向量的指针也无济于事,因为指向向量的指针的编码只是 ^,它然后贪婪地匹配列表中的下一个参数,导致我的参数计数再次关闭。我想我可以将向量转换为 void *,但那确实是一个丑陋的 hack。

最佳答案

看起来这是一个已知问题,clang 显然已被修改为在这种情况下显示警告:https://github.com/llvm-mirror/clang/commit/024d9c65e9d3887045c82be09e4f630f19da48b4

关于objective-c - 为什么 gcc 或 clang 不能正确地@encode SIMD 矢量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com