On 2015-12-17 15:51, Andrey Semashev wrote:
On 2015-12-17 15:33, Pali Rohár wrote:
On Thursday 17 December 2015 15:10:12 Andrey Semashev wrote:
On 2015-12-17 14:50, Andrey Semashev wrote:
On 2015-12-17 02:44, Kamil Rytarowski wrote:

On 16.12.2015 11:02, Pali Rohár wrote:

Hi! There is probably no portable way for checking CPU type. But
you do not need to know CPU type here. You need to know if CPU has
fast 64bit numeric operations (and use 64bit speed optimization),
right?

And this could be possible by checking size of int_fast32_t type
(defined in stdint.h). If is same as size of int_fast64_t type then
you could use 64bit optimization otherwise not (= 32bit integers
are faster then 64bit).

But I will let this suggestion for reviewing of other people.

This sounds like a good way to go.

I don't think it does. int_fast32_t does not have to be 64-bit if
32-bit
integers are fast.

Yes. I did not wrote that int_fast32_t must be 64-bit. I wrote to
compare size of int_fast32_t and int_fast64_t.

And they will be different on x32 which, following your logic, means
that on x32 32-bit integers are faster than 64-bit. That's not true.

It _may_ be larger than 32-bit if 32-bit integers are
slow (most likely - do not have the target hardware support). I don't
think this is the case for x32 or x86_64.

On 64bi x86 sizeof(int_fast32_t) is 8 and sizeof(int_fast64_t) also 8. On
32bit x86 sizeof(int_fast32_t) is only 4.

On x86_64, yes:

gcc -m64 -dM -E - < /dev/null | grep FAST32
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
#define __INT_FAST32_TYPE__ long int
#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
#define __UINT_FAST32_TYPE__ long unsigned int

On x32, no:

gcc -mx32 -dM -E - < /dev/null | grep FAST32
#define __INT_FAST32_MAX__ 0x7fffffff
#define __INT_FAST32_TYPE__ int
#define __UINT_FAST32_MAX__ 0xffffffffU
#define __UINT_FAST32_TYPE__ unsigned int

If integer performance is what this preprocessor check influences, I'd
suggest checking the size of size_t. Or testing for particular
architectures explicitly, with 64-bit being the default and 32-bit only
for the tested architectures (this would probably make the code more
easily maintainable in the future).

I've sent this privately in error.

Also, it seems size_t is 32-bit on x32, so disregard that suggestion.

Important question is: what you want to distinguish? It is not 32 vs 64
bit processor right? It is if architecture has 64bit long registers? Or
something else?

The bitness of the architecture is a rather fuzzy term, but yes, it is
important to determine what for this check is needed. From the
discussion I gathered that the goal is to determine the largest fast
integer type for math.

Damn, I keep pressing Reply instead of Reply to all... Sorry again.

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to