1 #include <stdio.h> 2 #include <stdlib.h> 3 4 char b1[23] ="0123456789abcdefghijklm"; 5 char b2[23] ="mlkjihgfedcba9876543210"; 6 char b3[23] ="mmmmmmmmmmmmmmmmmmmmmmm"; 7 char b4[23] ="00000000000000000000000"; 8 char longbuf1[256]; 9 char longbuf2[256]; 10 11 static int clc(char *a1,char *a2, int l) 12 { 13 int cc; 14 15 asm volatile( "larl 1, 1f\n" 16 "ex %3,0(1)\n" 17 "j 2f\n" 18 "1: clc 0(1,%1),0(%2)\n" 19 "2: ipm %0\n" 20 "srl %0,28\n" 21 :"=d" (cc) 22 :"a" (a1), "a" (a2), "d" (l): "1", "cc"); 23 return cc; 24 } 25 26 27 void testrun(char *a1, char *a2, int l) 28 { 29 int cc; 30 31 cc = clc(a1, a2, l); 32 printf("%d bytes:%d\n",l, cc); 33 } 34 35 36 void multiplex(int l, long offset1, long offset2) 37 { 38 testrun(b1 + offset1, b1 + offset2, l); 39 testrun(b1 + offset1, b2 + offset2, l); 40 testrun(b1 + offset1, b3 + offset2, l); 41 testrun(b1 + offset1, b4 + offset2, l); 42 testrun(b2 + offset1, b2 + offset2, l); 43 testrun(b2 + offset1, b3 + offset2, l); 44 testrun(b2 + offset1, b4 + offset2, l); 45 testrun(b3 + offset1, b3 + offset2, l); 46 testrun(b3 + offset1, b4 + offset2, l); 47 testrun(b4 + offset1, b4 + offset2, l); 48 } 49 50 void sweep(int l) 51 { 52 multiplex(l, 0, 0); 53 multiplex(l, 1, 0); 54 multiplex(l, 1, 1); 55 multiplex(l, 0, 1); 56 } 57 58 int main() 59 { 60 sweep(0); 61 sweep(1); 62 sweep(2); 63 sweep(3); 64 sweep(4); 65 sweep(5); 66 sweep(22); 67 testrun(longbuf1, longbuf2, 255); 68 longbuf1[255] = 'a'; 69 testrun(longbuf1, longbuf2, 255); 70 longbuf2[255] = 'b'; 71 testrun(longbuf1, longbuf2, 255); 72 return 0; 73 } 74 75