aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/coord/dr.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-03-29 10:04:16 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2025-03-29 10:04:16 +0100
commitb6c1ff6cfdfe0f4ce602fe83e54c3112a1c95690 (patch)
treef9d61c905194276dcf632e31e07ec485b172b131 /src/solvers/coord/dr.h
parent0f23987edbbabdf88fbe175f695b4fdb727586fd (diff)
downloadnissy-core-b6c1ff6cfdfe0f4ce602fe83e54c3112a1c95690.tar.gz
nissy-core-b6c1ff6cfdfe0f4ce602fe83e54c3112a1c95690.zip
Optimize genptable for coordinate solve (20x speedup)
Diffstat (limited to 'src/solvers/coord/dr.h')
-rw-r--r--src/solvers/coord/dr.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/solvers/coord/dr.h b/src/solvers/coord/dr.h
index 5f3a99b..a312285 100644
--- a/src/solvers/coord/dr.h
+++ b/src/solvers/coord/dr.h
@@ -102,18 +102,21 @@ STATIC bool
102coordinate_dr_isnasty(uint64_t coord, const void *data) 102coordinate_dr_isnasty(uint64_t coord, const void *data)
103{ 103{
104 const char *datanoinfo; 104 const char *datanoinfo;
105 const uint32_t *classttrep; 105 const uint32_t *classttrep, *rep32;
106 uint32_t r;
106 107
107 datanoinfo = (const char *)data + INFOSIZE; 108 datanoinfo = (const char *)data + INFOSIZE;
108 classttrep = (const uint32_t *)datanoinfo; 109 classttrep = (const uint32_t *)datanoinfo;
110 rep32 = (const uint32_t *)(datanoinfo + DR_CLASS_TABLESIZE);
111 r = rep32[coord / POW_3_7];
109 112
110 return DR_ISNASTY(classttrep[coord]); 113 return DR_ISNASTY(classttrep[r]);
111} 114}
112 115
113STATIC size_t 116STATIC size_t
114coordinate_dr_gendata(void *data) 117coordinate_dr_gendata(void *data)
115{ 118{
116 uint64_t i, ii, j, n, t, nasty; 119 uint64_t i, j, n, t, nasty;
117 char *datanoinfo; 120 char *datanoinfo;
118 uint32_t *classttrep, *rep; 121 uint32_t *classttrep, *rep;
119 cube_t c; 122 cube_t c;
@@ -146,12 +149,11 @@ coordinate_dr_gendata(void *data)
146 continue; 149 continue;
147 150
148 c = invcoord_dreoesep_nosym(i); 151 c = invcoord_dreoesep_nosym(i);
149 ii = coord_dreoesep_nosym(c); 152 for (t = 1, nasty = 0; t < NTRANS && !nasty; t++) {
150 for (t = 0, nasty = 0; t < NTRANS && !nasty; t++) {
151 if (!((UINT64_C(1) << t) & coordinate_dr.trans_mask)) 153 if (!((UINT64_C(1) << t) & coordinate_dr.trans_mask))
152 continue; 154 continue;
153 155
154 nasty = ii == coord_dreoesep_nosym(transform(c, t)); 156 nasty = i == coord_dreoesep_nosym(transform(c, t));
155 } 157 }
156 158
157 for (t = 0; t < NTRANS; t++) { 159 for (t = 0; t < NTRANS; t++) {

Generated with cgit - Back to sebastiano.tronto.net