@include @include @include @include @include define aqsortdom(){ @local aqsortns, pras, gns; gns = init_debug_domain("./aqsort"); pras = launchlocalproc("./aqsort"); return mkdom(gns, pras); } define testaqsort(){ @local val, gas, nsolid, candidate, tmp, pr; tmp = mkdom(@names clp64le { @0x0 int val[64]; }, mkzas(1024)); pr = aqsortdom(); gas = 63; nsolid = 0; candidate = 0; val = tmp`val; for(i = 0; i < 64; i++) val[i] = gas; pr.bpset((pr`uint64)skip_prologue(pr, "cmpx"), lambda(addr){ @local x, y, ra, id, lns, ldom; lns = pr.nscon(pr.as, addr); ldom = mkdom(lns, pr.as); x = {tmp}*((int*)ldom`px); y = {tmp}*((int*)ldom`py); pr`ncmp++; if(val[x] == gas && val[y] == gas) if(x == candidate) val[x] = nsolid++; else val[y] = nsolid++; if(val[x] == gas) candidate = x; else if(val[y] == gas) candidate = y; ra = getretaddr (addr); id = pr.bpset(ra, lambda(addr){ pr.seteax(val[x]-val[y]); pr.bpdel(id); }); return nil; }); pr.xcontwait(); for(i = 0; i < 64; i++) printf("%d ", val[i]); printf("\n"); } testaqsort();