This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: recent troubles with float vectors & bitwise ops


Apparently enough for a small vendor like Intel to propose such things as orps, andps, andnps, and xorps.

I think you're running too far with your sarcasm. SSE's instructions do not go so far as to specify integer vs. floating point. To me, "ps" means "32-bit SIMD", independent of integerness.


So, that's what i feared... it was intentional. And now i guess the only sanctioned access to those ops is via builtins/intrinsics.

No, you can do so with casts. Floating-point to integer vector casts preserve the bit pattern. For example, you can do


vector float f = { 5, 5, 5, 5 };
vector int g = { 0x80000000, 0, 0x80000000, 0 };
vector int f_int = (vector int) f;
f = (vector float) (f_int ^ g);

For Altivec, I get exactly

        addis r2,r10,ha16(LC0-"gibberish")
        la r2,lo16(LC0-"gibberish")(r2)
        lvx v0,0,r2
        vxor v2,v2,v0
	...
    LC0:
        .long   -2147483648
        .long   0
        .long   -2147483648
        .long   0

Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]