1b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include <stdio.h> 2b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include "test.h" 3b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define icm(r1, mask, b) do {\ 4b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "lg 1, 0(%0)\n" \ 5b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "icm 1," #mask ",0(%1)\n" \ 6b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "stg 1, 0(%0)\n" \ 7b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj :: "a" (r1), "a" (b) \ 8b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "1", "memory", "cc"); \ 9b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} while(0) 10b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 11b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define icmh(r1, mask, b) do {\ 12b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "lg 1, 0(%0)\n" \ 13b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "icmh 1," #mask ",0(%1)\n" \ 14b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "stg 1, 0(%0)\n" \ 15b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj :: "a" (r1), "a" (b) \ 16b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "1", "memory", "cc"); \ 17b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} while(0) 18b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 19b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjint main() 20b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj{ 21b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj long a[320]; 22b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char buffer[256]; 23b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b1="\x80\x00\x00\x00"; 24b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b2="\x00\x00\x00\x01"; 25b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b3="\xff\x00\x00\x00"; 26b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b4="\x00\xff\x00\x00"; 27b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b5="\x00\x00\xff\x00"; 28b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj char *b6="\x00\x00\x00\xff"; 29b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj int n; 30b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj int cc; 31b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 32b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj for (n=0; n<320; n++) 33b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj a[n] = n; 34b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 35b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define test(what, offset) do { \ 36b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[0+offset], 0, what); cc = get_cc(); \ 37b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[1+offset+cc], 1, what); cc = get_cc(); \ 38b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[2+offset+cc], 2, what); cc = get_cc(); \ 39b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[3+offset+cc], 3, what); cc = get_cc(); \ 40b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[4+offset+cc], 4, what); cc = get_cc(); \ 41b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[5+offset+cc], 5, what); cc = get_cc(); \ 42b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[6+offset+cc], 6, what); cc = get_cc(); \ 43b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[7+offset+cc], 7, what); cc = get_cc(); \ 44b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[8+offset+cc], 8, what); cc = get_cc(); \ 45b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[9+offset+cc], 9, what); cc = get_cc(); \ 46b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[10+offset+cc], 10, what); cc = get_cc(); \ 47b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[11+offset+cc], 11, what); cc = get_cc(); \ 48b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[12+offset+cc], 12, what); cc = get_cc(); \ 49b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[13+offset+cc], 13, what); cc = get_cc(); \ 50b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[14+offset+cc], 14, what); cc = get_cc(); \ 51b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icm(&a[15+offset+cc], 15, what); cc = get_cc(); \ 52b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[0+offset+cc], 0, what); cc = get_cc(); \ 53b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[1+offset+cc], 1, what); cc = get_cc(); \ 54b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[2+offset+cc], 2, what); cc = get_cc(); \ 55b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[3+offset+cc], 3, what); cc = get_cc(); \ 56b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[4+offset+cc], 4, what); cc = get_cc(); \ 57b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[5+offset+cc], 5, what); cc = get_cc(); \ 58b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[6+offset+cc], 6, what); cc = get_cc(); \ 59b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[7+offset+cc], 7, what); cc = get_cc(); \ 60b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[8+offset+cc], 8, what); cc = get_cc(); \ 61b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[9+offset+cc], 9, what); cc = get_cc(); \ 62b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[10+offset+cc], 10, what); cc = get_cc(); \ 63b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[11+offset+cc], 11, what); cc = get_cc(); \ 64b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[12+offset+cc], 12, what); cc = get_cc(); \ 65b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[13+offset+cc], 13, what); cc = get_cc(); \ 66b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[14+offset+cc], 14, what); cc = get_cc(); \ 67b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj icmh(&a[15+offset+cc], 15, what); \ 68b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} while (0) 69b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 70b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj for (n=0; n<256; n++) 71b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj buffer[n] = n; 72b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 73b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[0],0); 74b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[60],16); 75b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[120],32); 76b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[180],48); 77b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[240],64); 78b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[252],80); 79b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b1,96); 80b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b2,112); 81b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj for (n=0; n<256; n++) 82b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj buffer[n] = 255-n; 83b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[0],128); 84b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[60],144); 85b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(&buffer[160],160); 86b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b3,176); 87b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b4,192); 88b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b5,208); 89b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj test(b6,224); 90b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 91b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj dump_field((char *) a, sizeof(a)); 92b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 93b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj return 0; 94b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj} 95