Changes in directory llvm-test/SingleSource/UnitTests/Vector/Altivec:
Makefile added (r1.1) test1.c added (r1.1) --- Log message: Add an altivec-specific test for altivec intrinsics --- Diffs of the changes: (+64 -0) Makefile | 8 ++++++++ test1.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) Index: llvm-test/SingleSource/UnitTests/Vector/Altivec/Makefile diff -c /dev/null llvm-test/SingleSource/UnitTests/Vector/Altivec/Makefile:1.1 *** /dev/null Sun Mar 26 23:54:15 2006 --- llvm-test/SingleSource/UnitTests/Vector/Altivec/Makefile Sun Mar 26 23:54:05 2006 *************** *** 0 **** --- 1,8 ---- + # SingleSource/UnitTests/Vector/Altivec/Makefile + + DIRS = + LEVEL = ../../../.. + include $(LEVEL)/SingleSource/Makefile.singlesrc + + TARGET_CFLAGS += -maltivec + LCCFLAGS += -maltivec Index: llvm-test/SingleSource/UnitTests/Vector/Altivec/test1.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Vector/Altivec/test1.c:1.1 *** /dev/null Sun Mar 26 23:54:18 2006 --- llvm-test/SingleSource/UnitTests/Vector/Altivec/test1.c Sun Mar 26 23:54:05 2006 *************** *** 0 **** --- 1,56 ---- + #include <stdio.h> + #include <altivec.h> + + #if 0 + vector float func(vector float vi){ + #else + void func(vector float *arg){ + vector float vi = *arg; + #endif + vector float vzero = {0.0f, 0.0f, 0.0f, 0.0f}; + vector float vres; + vector int vmask; + + vmask = vec_sld(vec_splat_s32(0), vec_splat_s32(-1), 4); + vi = vec_sel(vi, vzero, (vector unsigned int)vmask); /* (x, y, z, 0) */ + vres = vec_madd(vi, vi, vzero); /* (x^2, y^2, z^2, 0) */ + if(vec_all_eq(vres, vzero)) /* Is squared vec equal to the zero vec? */ + { + vres = vec_ctf(vec_sld(vmask, vmask, 4), 0); /* return (0 0 -1 0) */ + } + else + { + vector float vtmp; + vtmp = vec_sld(vres, vres, 4); + vtmp = vec_add(vtmp, vres); /* (x^2 + y^2, y^2 + z^2, z^2, x^2) */ + vtmp = vec_sld(vtmp, vtmp, 8); /* (z^2, x^2, x^2 + y^2, y^2 + z^2) */ + vtmp = vec_add(vtmp, vres); /* (x^2 + z^2, x^2 + y^2, x^2 + y^2 + z^2, y^2 + z^2) */ + vtmp = vec_splat(vtmp, 2); + vtmp = vec_rsqrte(vtmp); + vres = vec_madd(vtmp, vi, vzero); + } + #if 0 + return vres; + #else + *arg = vres; + #endif + } + + int main(int argc, char *argv[]) + { vector float v = {0.0f, 3.0f, 1.0f, 4.0f}; + float f[4]; + #if 0 + v = func(v); + #else + func(&v); + #endif + f[0] = ((float *) &v)[0]; + f[1] = ((float *) &v)[1]; + f[2] = ((float *) &v)[2]; + f[3] = ((float *) &v)[3]; + + printf("[%f %f %f %f]\n", f[0], f[1], f[2], f[3]); + + return 0; + } + _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits