微信小程序开发里 var that = this 的基础用法及要点解析
837
2022-08-24
__attribute__((mode(TI))) (128位)
On some targets, the instruction set contains SIMD vector instructions that operate on multiple values contained in one large register at the same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions can be used this way.The first step in using these extensions is to provide the necessary data types. This should be done using an appropriate typedef:typedef int v4si attribute ((mode(V4SI)));The base type int is effectively ignored by the compiler, the actual properties of the new type v4si are defined by the attribute. It defines the machine mode to be used; for vector types these have the form VnB; n should be the number of elements in the vector, and B should be the base mode of the individual elements. The following can be used as base modes:QI An integer that is as wide as the smallest addressable unit, usually 8 bits. HI An integer, twice as wide as a QI mode integer, usually 16 bits. SI An integer, four times as wide as a QI mode integer, usually 32 bits. DI An integer, eight times as wide as a QI mode integer, usually 64 bits. SF A floating point value, as wide as a SI mode integer, usually 32 bits. DF A floating point value, as wide as a DI mode integer, usually 64 bits. Not all base types or combinations are always valid; which modes can be used is determined by the target machine. For example, if targetting the i386 MMX extensions, only V8QI, V4HI and V2SI are allowed modes.There are no V1xx vector modes - they would be identical to the corresponding base mode.There is no distinction between signed and unsigned vector modes. This distinction is made by the operations that perform on the vectors, not by the data type.The types defined in this manner are somewhat special, they cannot be used with most normal C operations (i.e., a vector addition can not be represented by a normal addition of two vector type variables). You can declare only variables and use them in function calls and returns, as well as in assignments and some casts. It is possible to cast from one vector type to another, provided they are of the same size (in fact, you can also cast vectors to and from other datatypes of the same size).A port that supports vector operations provides a set of built-in functions that can be used to operate on vectors. For example, a function to add two vectors and multiply the result by a third could look like this:v4si f (v4si a, v4si b, v4si c) { v4si tmp = __builtin_addv4si (a, b); return __builtin_mulv4si (tmp, c); }So DI is essentially sizeof(char) * 8.Further explanation, including TI mode, can be found here (possibly better than the first link, but both provided for reference).So TI is essentially sizeof(char) * 16 (128 bits).like GCC promised that “long long” is twice as long as “long”, and broke the promise when they ported GCC to the first 64 bit architecture (MIPS). Now, if you are lucky, you can use typedef int int128_t attribute((mode(TI))); to create a real 128 bit type on some 64 bit platforms.
用法:
typedef int int128 __attribute__((mode(TI)));long long n;int128(n)...
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~