|
|
1.1 ! root 1: #include "apl.h" ! 2: ! 3: ex_rot0() ! 4: { ! 5: ! 6: fetch2(); ! 7: rotk(0); ! 8: } ! 9: ! 10: ex_rotk() ! 11: { ! 12: register k; ! 13: ! 14: k = topfix() - thread.iorg; ! 15: fetch2(); ! 16: rotk(k); ! 17: } ! 18: ! 19: ex_rot() ! 20: { ! 21: register struct item *p; ! 22: ! 23: fetch2(); ! 24: p = sp[-2]; ! 25: rotk(p->rank-1); ! 26: } ! 27: ! 28: rotk(k) ! 29: { ! 30: register struct item *p, *q; ! 31: register param; ! 32: int rot1(); ! 33: ! 34: p = sp[-1]; ! 35: bidx(sp[-2]); ! 36: if(k < 0 || k >= idx.rank) ! 37: error("rotate X"); ! 38: param = 0; ! 39: colapse(k); ! 40: if(idx.size != p->size) { ! 41: if(p->size != 1) ! 42: error("rotate C"); ! 43: param++; ! 44: datum = getdat(p); ! 45: } ! 46: p = newdat(idx.type, 1, idx.dimk); ! 47: push(p); ! 48: forloop(rot1, param); ! 49: pop(); ! 50: pop(); ! 51: } ! 52: ! 53: rot1(param) ! 54: { ! 55: register struct item *p, *q; ! 56: register i; ! 57: int o, n; ! 58: ! 59: if(param == 0) ! 60: datum = getdat(sp[-2]); ! 61: o = fix(datum); ! 62: if(o < 0) ! 63: o = idx.dimk - (-o % idx.dimk); ! 64: q = sp[-1]; ! 65: p = sp[-3]; ! 66: q->index = 0; ! 67: n = access(); ! 68: for(i=0; i<idx.dimk; i++) { ! 69: p->index = n + (o%idx.dimk)*idx.delk; ! 70: putdat(q, getdat(p)); ! 71: o++; ! 72: } ! 73: for(i=0; i<idx.dimk; i++) { ! 74: p->index = n; ! 75: putdat(p, getdat(q)); ! 76: n =+ idx.delk; ! 77: } ! 78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.