/* Test forcing 128-bit logical types into GPR registers. */ #if defined(NO_ASM) #define FORCE_REG1(X) #define FORCE_REG2(X,Y) #else #if defined(USE_ALTIVEC) #define REG_CLASS "+v" #define PRINT_REG1 "# altivec reg %0" #define PRINT_REG2 "# altivec reg %0, %1" #elif defined(USE_FPR) #define REG_CLASS "+d" #define PRINT_REG1 "# fpr reg %0" #define PRINT_REG2 "# fpr reg %0, %1" #elif defined(USE_VSX) #define REG_CLASS "+wa" #define PRINT_REG1 "# vsx reg %x0" #define PRINT_REG2 "# vsx reg %x0, %x1" #else #define REG_CLASS "+r" #define PRINT_REG1 "# gpr reg %0" #define PRINT_REG2 "# gpr reg %0, %1" #endif #define FORCE_REG1(X) __asm__ (PRINT_REG1 : REG_CLASS (X)) #define FORCE_REG2(X,Y) __asm__ (PRINT_REG2 : REG_CLASS (X), REG_CLASS (Y)) #endif void ptr1 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a & b; /* AND */ FORCE_REG1 (c); p[0] = c; } void ptr2 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a | b; /* OR */ FORCE_REG1 (c); p[0] = c; } void ptr3 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a ^ b; /* XOR */ FORCE_REG1 (c); p[0] = c; } void ptr4 (TYPE *p) { TYPE a = p[1]; TYPE b; FORCE_REG1 (a); b = ~a; /* NOR */ FORCE_REG1 (b); p[0] = b; } void ptr5 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = ~(a & b); /* NAND */ FORCE_REG1 (c); p[0] = c; } void ptr6 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = ~(a | b); /* AND */ FORCE_REG1 (c); p[0] = c; } void ptr7 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = ~(a ^ b); /* EQV */ FORCE_REG1 (c); p[0] = c; } void ptr8 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = (~a) & b; /* ANDC */ FORCE_REG1 (c); p[0] = c; } void ptr9 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = (~a) | b; /* ORC */ FORCE_REG1 (c); p[0] = c; } void ptr10 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = (~a) ^ b; /* EQV */ FORCE_REG1 (c); p[0] = c; } void ptr11 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a & (~b); /* ANDC */ FORCE_REG1 (c); p[0] = c; } void ptr12 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a | (~b); /* ORC */ FORCE_REG1 (c); p[0] = c; } void ptr13 (TYPE *p) { TYPE a = p[1]; TYPE b = p[2]; TYPE c; FORCE_REG2 (a, b); c = a ^ (~b); /* AND */ FORCE_REG1 (c); p[0] = c; }