static int domain_mask[4][1000];
static int cache[4][1000];
int main () {
int stride = 500;
int count = 200;
int pernum = 43;
int j = 0, m = 0;
int k = 0, n = 0;
int u = 0;
for (;u < 500 * 32; k++,m++,u++) {
if (k >= 32) {
k = 0;
n++;
}
if (m >= pernum) {
m = 0;
j++;
}
if (j >= 4) {
j = 0;
}
domain_mask[j][n] |= 1 << k;
//printf("j:%d, n:%d, k:%d,domain_mask:%p\n", j, n, k, domain_mask[j][n]);
}
for (int g = 0; g < 500; g++) {
printf("g:%d\n", g);
printf("%x\t", domain_mask[0][g]);
printf("%x\t", domain_mask[1][g]);
printf("%x\t", domain_mask[2][g]);
printf("%x\t", domain_mask[3][g]);
printf("\n");
cache[0][g]=domain_mask[0][g];
cache[1][g]=domain_mask[1][g];
cache[2][g]=domain_mask[2][g];
cache[3][g]=domain_mask[3][g];
}
int type_set = 0;
int begin_word_bit = stride - (stride / 32)* 32 ;
int len_words = (count - (32 - begin_word_bit)) / 32 ;
int end_word_bit = (stride + count) % 32;
int word = stride / 32;
int num_word = word % pernum;
int begin = stride / 32;
int end = (stride + count) / 32;
unsigned int msk_begin = 0xffffffff << begin_word_bit;
unsigned int msk_end = 0xffffffff << end_word_bit;
int origin_begin;
int origin_end;
printf("begin:%d,begin_bit:%d,end:%d,end_bit:%d\n",begin, begin_word_bit, end, end_word_bit);
int i = 0;
for (; i < 4; i++) {
origin_begin = cache[type_set + i][begin];
origin_begin |= domain_mask[i][begin % pernum] & msk_begin;
cache[type_set + i][begin] = origin_begin;
origin_end = cache[type_set + i][end];
origin_end |= domain_mask[i][end % pernum] & (~ msk_end);
printf("i:%d,end:%d,~msk:%x\n",i, end, ~msk_end);
cache[type_set + i][end] = origin_end;
}
word = word + 1;
num_word = word;
int size = word + len_words ;
for (; word < size ; word ++, num_word ++) {
if (num_word >= pernum) {
num_word = num_word % pernum;
}
cache[type_set][num_word] = domain_mask[0][num_word];
cache[type_set + 1][num_word] = domain_mask[1][num_word];
cache[type_set + 2][num_word] = domain_mask[2][num_word];
cache[type_set + 3][num_word] = domain_mask[3][num_word];
}
printf("Hello world! - c.jsrun.net.\n");
for (int g = 0; g < 500; g++) {
/* printf("g:%d\n", g);
printf("%x\t", cache[0][g]);
printf("%x\t", cache[1][g]);
printf("%x\t", cache[2][g]);
printf("%x\t", cache[3][g]);
printf("\n");*/
}
return 0;
}