1b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include <stdio.h> 2b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include <stdlib.h> 3b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 4b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjchar b1[23] ="0123456789abcdefghijklm"; 5b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjchar b2[23] ="mlkjihgfedcba9876543210"; 6b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjchar b3[23] ="mmmmmmmmmmmmmmmmmmmmmmm"; 7b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjchar b4[23] ="00000000000000000000000"; 8b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjchar longbuf[17000000]; 9b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 10b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjstatic int clcle(unsigned long *_a1, unsigned long *_l1, unsigned long *_a3, unsigned long *_l3, char _pad) 11b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj{ 12b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long a1 asm ("2") = *_a1; 13b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long l1 asm ("3") = *_l1; 14b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long a3 asm ("4") = *_a3; 15b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long l3 asm ("5") = *_l3; 16b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long pad asm ("6") = _pad; 17b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj register unsigned long cc asm ("7"); 18b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 19b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "0: clcle 2,4,0(6)\n\t" 20b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "jo 0b\n\t" 21b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "ipm %0\n\t" 22b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "srl %0,28\n\t" 23b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj :"=d" (cc), "+d" (a1),"+d" (l1), "+d" (a3), "+d" (l3) 24b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "d" (pad) 25b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "memory", "cc"); 26b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj *_a1 = a1; 27b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj *_a3 = a3; 28b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj *_l1 = l1; 29b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj *_l3 = l3; 30b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 31b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj return cc; 32b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} 33b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 34b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 35b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjvoid testrun(void *_a1, unsigned long _l1, void *_a3, unsigned long _l3, char pad) 36b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj{ 37b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long a1,a3,l1,l3; 38b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj int cc; 39b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 40b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj a1 = (unsigned long) _a1; l1 = _l1; a3 = (unsigned long) _a3; l3 = _l3; 41b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj cc = clcle(&a1, &l1, &a3, &l3, pad); 42b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj printf("cc: %d, l1: %lu(%lu) l3: %lu(%lu) diff1: %lu diff3: %lu\n", 43b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj cc, l1, _l1, l3, _l3, a1-(unsigned long) _a1, a3-(unsigned long) _a3); 44b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} 45b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 46b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 47b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjvoid multiplex(unsigned long l1, unsigned long l3, char pad) 48b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj{ 49b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b1, l1, b1, l3, pad); 50b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b1, l1, b2, l3, pad); 51b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b1, l1, b3, l3, pad); 52b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b1, l1, b4, l3, pad); 53b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b2, l1, b2, l3, pad); 54b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b2, l1, b3, l3, pad); 55b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b2, l1, b4, l3, pad); 56b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b3, l1, b3, l3, pad); 57b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b3, l1, b4, l3, pad); 58b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(b4, l1, b4, l3, pad); 59b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} 60b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 61b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjint main() 62b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj{ 63b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(0,0,9); 64b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(1,0,9); 65b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(0,1,9); 66b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(1,1,9); 67b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(5,23,9); 68b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj multiplex(23,5,9); 69b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(longbuf,10000,longbuf,100000,0); 70b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(longbuf,10000,longbuf,100000,128); 71b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj testrun(longbuf,10000,longbuf,100000,255); 72b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj exit(0); 73b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} 74b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 75