Objective c 为什么可以';t gcc或clang是否正确@encode SIMD矢量类型?
在处理向量类型和ObjC运行时时,我遇到了一个非常复杂的问题 据我所知,clang或GCC都不会为任何SIMD向量类型提供“正确”的类型编码Objective c 为什么可以';t gcc或clang是否正确@encode SIMD矢量类型?,objective-c,vector,clang,simd,objective-c-runtime,Objective C,Vector,Clang,Simd,Objective C Runtime,在处理向量类型和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(
#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));
}
我只得到字符串@:
,这会导致NSMethodSignature
和NSInvocation
基本上弄脏他们的裤子,并导致他们的错误
我是否可以启用一些编译器选项来恢复向量类型的正确编码?或者这里唯一的解决方案是“不从ObjC方法返回向量”
注意:返回(或传递)指向向量的指针也没有帮助,因为指向向量的指针的编码只是
^
,然后会贪婪地匹配列表中的下一个参数,导致我的参数计数再次关闭。我想我可以将向量转换为一个无效*
,但这确实是一个丑陋的攻击。看起来这是一个已知的问题,在这种情况下,clang显然被修改为显示警告:
2014-04-09 06:21:01.102 test[1707:507] Int4:
2014-04-09 06:21:01.103 test[1707:507] Float4:
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]
-(int4) foo;