diff --git a/docs/analysis/ca3-v4-uniform.md b/docs/analysis/ca3-v4-uniform.md new file mode 100644 index 000000000..db1689082 --- /dev/null +++ b/docs/analysis/ca3-v4-uniform.md @@ -0,0 +1,62 @@ +# AP-F8-1 under the windows-union model: the hot set is the load source, not the window (7 October 2026) + +Branch `ca3-v4-uniform` from master b92a5fd4, worker "v4-hash", on the attack-pass finding AP-F8-1 (`docs/analysis/attack-pass/f8-uniform.md`, branch attack-pass; logs `/srv/builds/igneum-wt-attack/target-attack-f8/log/`). Main's rulings bound this file: no generator change to class v4 on the live devnet; the analysis and its harness only. Every GPU-free number here is arithmetic on F8's logged counts or a run of the static census tool `tools/ca3-v4-uniform/` on igneum-build-1 (built through `tools/build-remote.sh`, rule R1); the chip figures are the terms of `docs/analysis/chip-model-v3.md` and are approximate. + +## 1. The null F8's numbers must be read against + +Layer 8 (`docs/plans/era-layout.md` 1.4, spec 01 1.13.1 as proposed) gives every load site a window draw `k_off = below(3)`: the site reads the whole dataset, an aligned half or an aligned quarter, at a 2^26-word floor. A quarter-window site concentrates its reads 4x on its quarter and a half-window site 2x on its half, by design; the union of the 16 windows is the whole dataset. For p1 (the devnet epoch-0 program, id c120d7963abdcd96) the 16 draws `0:2:1 1:1:1 2:1:1 3:1:1 4:0:0 5:1:1 6:0:0 7:2:2 8:1:1 9:1:1 10:2:0 11:0:0 12:0:0 13:0:0 14:2:0 15:1:1` (site:k:offset) give an expected read density by quarter of 3.25 : 2.25 : 5.75 : 4.75 sixteenths of the flat mean, which at 2^26 nonces (512 reads per item flat) is 416, 288, 736 and 608 reads per item. The top-f share of a Poisson mixture with those means (`uniform-model.txt`, exact Poisson for p1, a normal approximation for the census): + +| Share of all reads on the top f of items, 2^26 nonces | Flat Poisson (F8's control) | Windows-union model, p1 | F8 measured, p1 | Beyond the window model | +|---|---|---|---|---| +| f = 0.1 percent | 0.115 | 0.160 | 0.520 | +0.36 | +| f = 0.5 percent | 0.565 | 0.784 | 1.515 | +0.73 | +| f = 1 percent | 1.120 | 1.553 | 2.495 | +0.94 | + +So the window model moves the null from 0.115 to 0.160 percent at f = 0.1 percent (1.39x, not F8's 4.05x) and from 1.12 to 1.55 at f = 1 percent; it explains the 64-item-bucket sigma of p2 that F8 already attributed to the window layer, and it explains every per-site attribution row of p1 except one: sites with a half window over the hot region land 0.20 percent of their reads in the top 0.1 percent (sites 1, 2, 3, 5, 9 at 0.201), quarter-window sites 0 or about 0.4 (sites 0, 10, 14 at 0.000, site 7 at 0.241 straddling), whole-dataset sites 0.10. Site 15 lands 6.374 percent. The excess over the model (+0.36 at f = 0.1 percent) is one site. + +## 2. The 153x item is the load source, and the model predicts it to the item + +p1's site 15 is the load at instruction 63 (`load dst=3 src=6`, window half 1). Its source r6 was last written at instruction 61: `or dst=6 src=4` (`r6 |= r4`, `verify.rs` Op::Or), after a fresh dataset load into r6 at 47. An OR of two near-uniform registers sets each bit with probability 3/4, so the source takes the all-ones value with probability (3/4)^32 = 1.0e-4 per read and the values of popcount 31, 30, ... with 32, 496, ... times (3/4)^k (1/4)^(32 - k). The era map `y = rotl(x * 0x9ad30d99, 29)`, the half window and the interleave split (`memhard::Layout::split`, positions 0, 2, 12, 13) send x = 0xffffffff to item 0xca5b92: F8's hottest item exactly. F8's next seven items (0x8a5b92, 0xaa5b92, 0xba5b92, 0x825b92, 0xe65b92, 0x985b92, 0xbcc392) are exactly the seven one-zero-bit sources whose zero bit survives the window mask (bits 29, 28, 27, 26, 25, 24 and 15): 7 of 7. The measured count fixes the bit bias: 78,479 reads of 2^26 x 8 site-15 reads is p^32 at p = 0.7585 (r4 is slightly biased itself), and at that p the popcount model predicts 77,348 all-ones reads and 4.86 percent of site 15's reads into the top 0.1 percent of items (measured 6.37; 3.92 at p = 3/4). Per hash that is 4.86 / 16 = 0.30 percent of all reads, and 0.160 + 0.30 = 0.46 against F8's 0.520 at f = 0.1 percent; at f = 1 percent 14.5 / 16 = 0.90, and 1.55 + 0.90 = 2.46 against 2.495. + +The same arithmetic for the other lossy writers (`uniform-model.txt`): a `mul` last writer zeroes the low bits by the operands' trailing zeros, so 1.07 percent of the site's reads land on the 0.1 percent of values with 10 or more trailing zeros (p2's `mul`-sourced sites 0 and 14 measured 0.971 and 0.966 percent); a `mulhi` last writer is dense near zero, 0.79 percent on the lowest 0.1 percent of values. An `or` whose operand was itself last written by `or` compounds the bias (3/4 to 7/8 to 15/16): p3's site 15 (`or` at 30, the load at 62) puts 72.4 percent of its reads into the top 0.1 percent, 4.6 percent of all reads on 16,777 items. + +This is a fault class, not the window model: the acceptance rule's part (a) (`accept.rs` check_stale_loads) takes any write as a fresh source, and part (c)'s saturation count looks at the 16,384 final register values, not at a load's source mid-program, so an `or`, `mul` or `mulhi` as a load's last writer passes. The per-hash distinct-address check still holds (p1 127.999 items per hash; p3 127.97: a saturated site repeats its item inside a hash), and the acceptance rule's floor of 120 distinct of 128 admits exactly one site repeating its item in all 8 iterations and no more. + +## 3. How common it is: the static census (`tools/ca3-v4-uniform`, 1,024 chain-shaped class v4 programs plus F8's p1 to p3) + +For every load site, the op that last wrote its source in execution order (base instructions before it, else the shadow block of the previous iteration, else the base instructions after it): injecting (add, sub, xor, mad, shfl, load), bijective (rotl, rotr) or lossy (or, mul, mulhi). Run on igneum-build-1 (`uniform-census.txt`, binary sha256 ce9f83fe... then the narrowed chain rule). + +| Census over 1,024 programs | Count | Share | +|---|---|---| +| Load sites by last writer: injecting / bijective / lossy | 11,368 / 2,121 / 2,943 of 16,432 | 69 / 13 / 18 percent; 2.87 lossy sites per program | +| Programs with at least one lossy-sourced load | 992 | 96.6 percent | +| ... with an `or`-sourced load (p1's class, 0.30 percent of all reads per site) | 498 | 48.5 percent | +| ... with an `or`-of-`or` chain (p3's class, about 4.5 percent of all reads per site) | 50 | 4.9 percent | +| ... with a `mul`-sourced load (0.067 percent per site) / a `mulhi`-sourced load (0.049) | 751 / 661 | 73.1 / 64.4 percent | +| Predicted S_0.1 percent (window model plus the lossy sites): median / 90th / 99th / max | 0.45 / 0.88 / 5.29 / 9.82 percent | against the window model's 0.115 to 0.251 | +| p1 / p2 / p3 predicted against F8 measured | 0.579 / 0.323 / 4.72 | 0.520 / 0.272 / 4.60 | + +F8's proposed gate (the top 0.1 percent within 1.2x of the window-model control on every one of 64 seeds) fails 96.6 percent of today's programs, because any lossy-sourced site alone exceeds it (0.16 + 0.05 at the least); it is a generator change in a gate's clothing. A 2x bound fails 69.7 percent, 3x 48.9 percent; a bound of S_0.1 percent at or under 1 percent of all reads fails 6.9 percent (the `or` chains and the multi-`or` programs). The static rule "no load whose source's last writer is `or`" fails 48.4 percent; "no lossy last writer" 96.6 percent. + +## 4. What the skew is worth to a chip (chip-model-v3.md terms, approximate) + +A hot-set cache of the top 0.1 percent of items is 16,777 items x 64 B = 1.07 MB of SRAM, 0.53 mm^2 and $0.25 at 0.49 mm^2 and $0.23 per MB. It serves 0.52 percent of p1's reads (0.16 of them the window model's), 4.6 percent of p3's. The hash is latency-bound on its dependent reads, so a read served on die is time saved: a chip gains at most 1.005x on p1 and 1.048x on p3 from the cache. The ceiling under the live rule: part (c)'s 120-of-128 floor admits one site repeating its item in all 8 iterations and no more (two saturated sites fail it), so at most 8 of 128 reads, 6.25 percent, can sit on a constant item, and a chip's edge from this whole class is at most 1 / (1 - 0.0625) = 1.067x, in 64 bytes of SRAM, on the hours whose program carries such a site. The public claim rests on 2x margins (chip-model-v3.md); 1.067x does not move it, and the union of the windows is still the whole dataset every hour, so no window-level cache exists. What moves: per tier nothing in rate or watts (the honest card reads the hot item from L2 as the chip would), and the 5 percent rule of 2.0 is untouched. + +## 5. The two options for the flip, priced (main's ruling 3; nothing ships on this without the project lead's word) + +| Option | What changes | Cost | Risk | +|---|---|---|---| +| A. A class amendment in 0.3.19 before the flip: the generator draws a load's source from the registers whose last writer injects (or rule (a) tightened to the same), class v4 re-pinned | a new program stream: new vectors, the seven gate packs re-exported, the six gates again (the hash side G1 to G3 and the verifier re-run here in about an hour of Mac and PC 2 time; G4 to G6 the node lane), every node before the flip by the one-box-at-a-time fleet rule | hours of gate time, a fleet rollout, the 0.3.19 ship on the line | a node that misses the build splits the chain at the flip; the fix itself is small (one draw rule) | +| B. Hold v4 at the floor as it is; the source rule in class v5 | nothing on the devnet; the attack-pass record carries the window null and the bound | a hot set on 48 percent of hours worth up to 1.005x to a chip, on 5 percent of hours up to 1.05x, 1.067x at the rule's ceiling, no chain risk | the public line must state the bound, not "uniform" | + +The number that decides it: 1.067x at the ceiling against the 2x margin of the chip claim. Recommendation: B, with the v5 item below, unless the project lead wants the tail tight now. + +## 6. The acceptance bound for the next class (main's ruling 4) + +Definition: for a program, H = W_0.1(windows) + sum over load sites of h(last writer of the source), with W from the Poisson mixture of the 16 window draws (0.115 to 0.251 percent at 2^26 nonces) and h = 0.30 percent for `or`, 4.5 for an `or` chain, 0.067 for `mul`, 0.049 for `mulhi`, 0 for an injecting or bijective writer (the figures of section 2 at the measured bias). The bound: H at or under 1.2 x W, which is the static rule "every load's source was last written by an injecting op or a rotate" (any lossy writer breaks 1.2x). Its cost as a rejection rule on today's stream: 96.6 percent of candidates, about 30 attempts per seed on average. The cheaper form is a generator draw, not a rejection: draw a load's source from the registers whose last writer injects (today's rule draws from every written register), which costs no attempts and leaves rule (a) as it is. Either way the 64-seed census of F8's phase E is the gate, with the dynamic check extended to count saturated load sources over the 64 units beside the final values. + +## 7. What is unverified + +- The per-site h figures are the popcount and trailing-zeros models at the biases F8 measured on p1 and p2; p3's chain figure is F8's measurement, not a model. F8's phase E (64 seeds, dynamic) is the test of the whole table. +- The window model's top-f shares for the census use a normal approximation per quarter (p1's exact Poisson 0.160 against 0.159). +- No GPU run and no timing here; every number is a count or arithmetic. diff --git a/docs/analysis/era-vdf-2026-10-07.md b/docs/analysis/era-vdf-2026-10-07.md new file mode 100644 index 000000000..691b63dda --- /dev/null +++ b/docs/analysis/era-vdf-2026-10-07.md @@ -0,0 +1,86 @@ +# The era VDF: built, measured and gated (7 October 2026) + +Era VDF lane, 7 October 2026, from the attack pass's F7 row (`docs/analysis/attack-pass/f7-era.md`, sub-row a: the node's era seed was a plain chain block hash, grindable with one block of hash at no delay, and the 1-hour VDF of spec 04 section 4.4 did not exist in the node). Repository branch `era-vdf` (this record, the spec text, the harness `tools/era-vdf/`, the fast-time fields); node fork branch `era-vdf-node` on the 0.3.19 line (`release-0.3.19-node` dc141409). Every number below names its log on igneum-build-1 under `/srv/builds/igneum-wt-era-vdf/ev-*/`. + +## 1. What was built + +| Piece | Where | What | +|---|---|---| +| The integer | `consensus/core/src/era_vdf/bigint.rs` | a fixed-width signed integer (40 limbs, 2,560 bits) on the stack: add, sub, mul, shifts, Knuth division with floor, truncated, exact and Euclidean remainders, the extended gcd and the partial extended gcd with Lehmer's word steps (chiavdf `xgcd_partial.c`), modpow, sqrt and the fourth root, Miller-Rabin with the first 30 primes as bases; every operation checked against `num-bigint` on 20,000 random operands of the class group's sizes, the known-failed shapes first | +| The class group | `era_vdf/classgroup.rs` | `proto-vdf/src/classgroup.rs` (3 October 2026) on the fixed-width integer: NUDUPL and NUCOMP ported line by line from chiavdf's `qfb_nudupl` and `qfb_nucomp`, the plain duplication and Cohen 5.4.7 kept as the oracles the tests hold them to on random forms at 256, 512 and 1,024 bits; serialization as sign byte plus fixed width, 258 bytes a form | +| Wesolowski | `era_vdf/wesolowski.rs` | eval with serialized checkpoints (at most 2^16, 17 MB), the 12-bit-digit block prover bucketed per residue class and parallel over them, the naive prover as the oracle, verify; T + 1, another y, another pi and another input refused | +| The hash chain | `era_vdf/hashchain.rs` | scheme 1: T sequential SHA-256 applications from a tagged start; verification by recomputation; one step short refused | +| The scheme byte and the seed | `era_vdf/mod.rs` | `vdf_scheme` 0 and 1, `EraVdfProof` and its wire form, `era_vdf_input` (the chain's BLAKE2b keyed `IgneumEraVdfInput` over `chain_id || n || the day's blue hashes`), `era_seed_of` = SHA-256 of the scheme byte, the input, T and y | +| The switch | `consensus/core/src/config/params.rs`, `igneum.rs` | `pow_era_blocks` and `pow_era_lead` as override fields (the constants everywhere; in the digest when they differ), `era_vdf_activation_daa` (never), `vdf_scheme` (0), `era_vdf_t` (the reference T); the three in the digest once the activation is set (the 0.3.15 rule); installed with the PoW schedule | +| The node side | `consensus/src/processes/era_vdf.rs`, `model/stores/era_vdf.rs` | the cut rule (the chain block below the cut, memoised and re-validated by reachability), the day-of-blues input (memoised per cut block), the evaluator thread started by the virtual processor a quarter of the lead past the cut, the record store (one row per era), the header processor's wait when a header arrives before the record, the template's `era_seed` None while evaluating, `submit` for a record from outside (verified against this chain's input) | +| The template and the miner | `PowEpochInfo`, `RpcPowEpochInfo`, `rpc.proto` fields 37 to 44, `igneum-miner` | the era schedule, the VDF's state, scheme, T and input in every template; the miner holds while the node reports no era seed ("era VDF: the node is still evaluating"); `igneum-miner vdf bench|eval|verify` with the node's own code | +| The harness | `tools/era-vdf/reroll.mjs` | the F7 re-roll harness against the REAL era cut (era 120 DAA, lead 20 on the merged fast-time file; ports 30100 and up, suffix 1010), `--vdf off` the stand-in, `--vdf on` the VDF at a fast T, the adversary running the node's evaluator over its candidate before publishing | + +## 2. The parameters + +Measured 7 October 2026 on igneum-build-2 (AMD EPYC 9454P, 96 threads, Ubuntu 24.04), one core under `/srv/builds/_bin/lease cores 31` at nice 10 while the box ran other lanes' suites (load 25 to 75), with the node's own code (`igneum-miner vdf bench`, logs `ev-vdf-bench3.log`, `ev-vdf-bench5.log` in this lane's scratch) and chiavdf 7e62ce14 built on the box against GMP 6.3.0 (`ev-chiavdf`). + +| Parameter | Value | Label | +|---|---|---| +| Group | class group, 1,024-bit prime discriminant `D = -HashPrime("igneum-era-discriminant" \|\| input)`, `\|D\| = 7 mod 8` | Implemented (spec 4.2) | +| Generator, Fiat-Shamir prime, proof plan | `(2, 1, (1 - D) / 8)`; 256 bits; 12-bit digits, at most 2^16 serialized checkpoints (17 MB) | Implemented | +| Proof on the wire | 529 bytes: scheme (1), T (8), two 258-byte forms with 2-byte lengths; `y` and `pi` 258 bytes each | Measured | +| Scheme byte | `vdf_scheme` 0 = class group, 1 = hash chain; genesis 0 everywhere | Implemented | +| Reference rate, scheme 0 | 30,589 and 40,117 squarings/s in two 10-s runs on the box core (the spread is the box's load); 30,000 is the reference | Measured | +| `T_era`, scheme 0 | 3,600 x 30,000 = 108,000,000 squarings (`ERA_VDF_T_CLASS_GROUP`): 60 min at the reference, 45 at the faster run | Measured, set | +| Prove, scheme 0 | eval + prove 11.6 s at T 401,167 (eval 10.0 s): the single-thread block prover is about 14 percent of the evaluation, parallel over residue classes in the node (up to 8) | Measured | +| Verify, scheme 0 | 21.9 and 22.6 ms with the group held (mean of 20); 184 ms with the discriminant derived, the derivation being 161 to 167 ms, once per era | Measured (section 5 for the gate) | +| Reference rate, scheme 1 | 16.2 and 17.0 million SHA-256/s (SHA-NI); 16,000,000 is the reference; `T_era` = 57,600,000,000 hashes (`ERA_VDF_T_HASH_CHAIN`) | Measured, set | +| Verify, scheme 1 | recomputation: 10.1 s for T 170 million, the full hour at `T_era` | Measured | +| Discriminant search | 161 to 167 ms per era (Miller-Rabin with the first 30 primes on the fixed-width integer) | Measured | +| chiavdf on the same core | 208.8 K squarings/s (`vdf_bench square`, NUDUPL over GMP, 1,000,000 iterations); the AVX-512 IFMA path (`square_asm`) gave 127.3 K at 20,000 iterations and stalled at 300,000 and above in this build (built outside its Makefile's `FAST_MACHINE` flags), so the IFMA number is not established here | Measured; the asm path unestablished | +| Delay on the fastest prover measured | 108,000,000 / 208,800 = 517 s against the 1-s block interval (517x) and the 2-s publish window (259x); a prover 10x chiavdf's GMP path (the ceiling Chia's and the EF's hardware efforts aimed at, approximate, from memory) would still take 52 s, 26x the window | Computed from the measurements | +| The gate "at least 60x one block interval on the fastest known prover" | 517x on chiavdf's GMP path, the fastest evaluator measured on this hardware; PASS as measured, with the IFMA path unestablished (above) and the 10x hardware ceiling still 52x | PASS (measured), caveat recorded | + +The node's own evaluator is 5.2 to 6.8x slower than chiavdf's GMP path on the same core. That ratio only moves the honest side: `T_era` is set from the node's rate, so an honest node finishes in the hour; the attacker's margin is the delay at the fastest prover, above. + +## 3. The gate: the re-roll harness with the VDF off and on + +`tools/era-vdf/reroll.mjs` on igneum-build-2 (the box under other lanes' suites, nice 10; logs and per-cut JSON under `/srv/builds/igneum-wt-era-vdf/ev-harness-out/reroll-vdf-{on,off}-5.json`), three nodes of the fork at this record's commit on the fast-time file with `skip_proof_of_work`, era 120 DAA and lead 20 (cuts at `S = 120 n - 20`, one every two minutes), ports 30100 and up, suffix 1010; two honest virtual miners share 1 block/s on nodes 0 and 1; the adversary on node 2 holds a block A built on the tip at `S - 1` and tries to make it the era's cut block. With the VDF on, the adversary runs the node's own evaluator (`igneum-miner vdf eval`, the network's T) over its candidate before publishing; T is set from a 3-s bench at the start so the delay is about 5 s on one core of this box, five times the block interval. + +| Run | Switch | Cuts | A accepted | A became the cut block | Known-draw re-rolls (the seed the adversary knew before publishing is the era's seed) | Adversary's evaluation | Nodes agree on the era seed | Gate | Harness | +|---|---|---|---|---|---|---|---|---|---| +| vdf-off-5 (the stand-in, 15:08 to 15:22 UTC) | `era_vdf_activation_daa` never | 6 (eras 2 to 7) | 6 of 6 | 6 of 6 | 6 of 6: the seed is `hash(A)` every time | none needed: the draw of hash(A) is known the instant A is built | 3 of 3 on every era | FAIL (the known-pass fires) | SOUND | +| vdf-on-5 (the era VDF, 14:54 to 15:08 UTC) | activation 0, scheme 0, T 189,650 (5 s on this core) | 6 (eras 2 to 7) | 6 of 6 | 0 of 6 | 0 of 6 | 5.38 to 6.64 s, during which the honest chain advanced 3 to 10 blocks; A arrived behind them and never became the cut block | 3 of 3 on every era, the record ready (state 3) at every era start | PASS (silent) | SOUND | + +What the two runs say. Under the stand-in a miner with one block of hash at the right second owns the era draw outright on this network: holding the block at `S - 1` and publishing it the moment the chain reaches `S - 1` makes it the cut block in every one of six cuts (the attack lane's epoch-cut run saw 1 of 6, with the honest block often landing first; here the adversary is faster to the second), and its draw is known the instant the block is built. Under the VDF the same adversary cannot know any candidate's draw before T steps have run; while it ran them the honest chain moved 3 to 10 blocks, so its block arrived behind the cut and the seed came from the delay over the day of blues ending at the honest cut block, the same on all three nodes. The second half of the written argument of F7 (a) holds in the node, not only on paper: the re-roll needs the draw inside the window, and the window is 1 s against a delay of 5 s here and 517 s at the fastest prover measured on the production T (section 2). + +The known-pass and the known-fail ran on the same binaries, file and ports, the VDF switch the only difference. A first VDF-off run with a lookup defect in the harness (the adversary's block not found, so the verdict read "held") was discarded once the node's own log showed the adversary's hash as the cut block in 5 of 5 cuts; the harness now reads A from that log line. Two runs that overlapped on the box through a stale node of an earlier run were discarded as well (their nodes disagreed because they were two networks); the two runs above ran alone. + +## 4. The cut rule and the certified checkpoint (for the finality lane) + +The node names `C_era(n)` as the last selected-chain block below the cut on the header's own chain (the block the stand-in used), which is the checkpoint block the lead rule names under the O-4.3 decision of 3 October 2026 (certified or not). Three facts decide it: + +1. Determinism. A header's validity must be a function of its own past. "The certificate carried by a block in the header's past, for the highest-index checkpoint with DAA score at most the cut" is such a function, but a certificate that lands after the era starts flips the reading between headers of one era (a header before the carrier reads the fallback, a header after it reads the certificate), so the certified binding needs a second rule: the carrier must sit at most half a lead above the cut (3,600 DAA s, the merge depth) and be a chain ancestor of the header; under that rule every honest header of the era reads the same certificate once the network merged the carrier, and a header on a chain that never merged it reads the fallback, consistently with its own past. The chain-block reading needs no second rule. +2. Liveness. A finality pause across the cut (a third of weight leaving in an hour is a 30-day pause under rule v3) leaves the certified binding without a checkpoint for the era; the chain-block reading always has one, which is the reason O-4.3 was decided the way it was for the epoch. +3. The defence. The grinding defence is the delay: no candidate's draw is knowable for T steps, whichever block is the cut. The binding moves which block a withholder would have to be the author of, not whether withholding pays; both readings leave the withholder with a coin flip it cannot see. + +The change, if the finality lane wants the certified binding: `EraVdfManager::cut_block` (one function; the input, the delay and the seed are unchanged), plus the second rule above and a test with a certificate carried late. + +## 5. The verify gate on a 2019-class core + +The gate was "the VDF verifies in under 10 ms on a 2019-class core". Measured: 21.9 and 22.6 ms with the group held on the box core (above), which the F6 row's calibration puts at about 1.19x on an i7-9700K (the O-1.14 run: 6.0 ms on the 2019 core against 5.06 ms on the box proxy), so about 26 ms on a 2019 core, labelled a proxy: no 2019 host was rented this lane (Vast rentals are a purchase; not made without the project lead's word). NOT MET, by 2.2x on the box and about 2.6x on the proxy. + +Where the time goes and what closes it: a verification is two 256-bit exponentiations, about 770 group operations at 28 µs each; the operation is NUDUPL on the fixed-width integer, whose cost is the extended gcd (Lehmer rounds on 8-limb numbers) and the reduction. Three rounds of this lane moved it from 345 µs (a Lehmer convention defect that fell back to plain division every round) to 28 µs (the convention, i64 word division, 34 limbs, the x86-64 128-by-64 division); the next 2.2x is chiavdf's Pulmark reducer (reduce only when `a` exceeds 8 limbs, O-4.6) and a limb-level NUDUPL that keeps the partial gcd's intermediates in words, or GMP through `rug` behind a feature on the x86-64 Linux and Windows builds (chiavdf's 208 K/s is 6x this evaluator, which would put the verification near 4 ms as the prototype measured), with the fixed-width path the fallback for wasm and macOS. Owed, not blocking: the verification runs once per era (180 days) on a node that imports a record rather than evaluating; every mining node evaluates and never verifies. + +## 6. Consequences per tier (the standing rule of 5 October 2026) + +| Tier | What the era VDF costs | What it means | +|---|---|---| +| A home miner, any card (8, 12, 16, 24 or 32 GB), any vendor, Windows, Linux or macOS | one CPU core for about 60 min once per 180 days at the reference rate (a 2019-class desktop core about 72 min by the F6 calibration), 17 MB of host RAM for the prover's checkpoints during it, 0 bytes on the card; the node starts it a quarter of the lead past the cut and holds the record from then | nothing changes on the card or in the hash rate; the 2-hour lead covers a core half the reference speed; a node that was off across the cut evaluates on arrival and its miner holds until the record lands (the miner says so every 10 s) | +| A rig (one node, several cards) | the same one core on the rig's host, once per era | nothing per card | +| A pool user | the pool's node evaluates; the member's miner takes `era_seed` from the template as today | nothing | +| A light client or a syncing node | verifies an imported record in 22 ms (26 ms on a 2019 core, proxy) plus the 165-ms discriminant derivation, once per era; under scheme 1 it recomputes the hour | the 10-ms gate is missed (section 5); operationally one verification per 180 days | +| The protocol | the era draw's input is unknowable for 517 s on the fastest prover measured, against a 1-s block interval: the stand-in's one-block grind is closed (section 3) | the freeze of the draw procedure and the C_era cut rule no longer waits on the VDF's existence; it waits on the two decisions of `ledger-decisions.md` | + +## 7. What is owed + +- The P2P relay of an era record to a syncing peer and the RPC import (spec 4.5, O-4.10), before era 1 of any network with the switch set. +- The external review of the class-group port (O-4.1): the port is a second implementation checked against the textbook algorithms and `num-bigint`, not a review. +- The attack pass's F7 status row (branch `attack-pass`, `docs/analysis/attack-pass-2026-10.md`) reads INCOMPLETE pending this lane; the line for it, from section 3: "F7 (a): the era VDF is in the node (fork `era-vdf-node`); the re-roll harness against the real era cut fires with it off (6 of 6 cuts, the seed the adversary's block) and is silent with it on (0 of 6 across six cuts, the adversary's 5-s evaluation against a 1-s block interval, three nodes agreeing on every era seed); PASS, the delay 517 s on the fastest prover measured at the production T." +- The decisions of `docs/plans/ledger-decisions.md` (the activation per network, the cut's binding). diff --git a/docs/bench-log.md b/docs/bench-log.md index 5d5220b34..0c328e6dc 100644 --- a/docs/bench-log.md +++ b/docs/bench-log.md @@ -2652,3 +2652,32 @@ in the same shape and reports a box behind its wanted binary. | Rig | the same, and a rig that leaves is itself a weight removal: at 459 MH/s on tonight's devnet it is about 20 percent of the weight, over the hour's budget by itself | | Pool | a pool node is one voter carrying its members' whole weight; a pool restart is the largest single removal on the network and must be sliced like the fleet's | | The network | finality by miner weight is only as steady as the miners' uptime; until public hash dwarfs the fleet, the fleet's supervisor is a consensus component | + +## 7 October 2026, the first 16 GB card: an RTX 5060 Ti in a Thunderbolt enclosure on PC 2 (branch bench-5060ti) + +Machine: PC 2 (`1ccfe586`, Windows 11), an ASUS Dual GeForce RTX 5060 Ti (16 GB GDDR7, Blackwell sm_120, PnP `PCI\VEN_10DE&DEV_2D04&SUBSYS_8A111043`) in a Razer Core X V2 Thunderbolt enclosure ("USB4 Router (2.0), Razer - Core X V2", bus `0B:00.0`), beside the RTX 5090 on its own supply; NVIDIA driver 610.47 (WDDM 32.0.16.1047, the 5090's driver, nothing installed for the new card); the installed app 0.3.19 and its own `igneum-worker-cuda.exe` (NVRTC 12.8). Jobs `fetch-5060ti-packs-20261007` (the kit: `tools/bench-5060ti/make-kit.sh`, the class v4 pack at sub-version 1 and the v3 control, sha256 `fd8393ed...`, 105,892 bytes) and `run-5060ti-bench-20261007-b` (`tools/bench-5060ti/pc2-5060ti-bench.ps1`, 14:44:19Z, ran 14:45:05 to 14:58:11Z, exit 0; the 5060 Ti alone through the runner's `--cards-off`, the 5090 mining throughout; run `-a` died in 1 s on an argument-binding fault in the nvidia-smi query and is void). PC 2 lost power twice that day, so the job WRITES NO POWER LIMIT: it reads `power.limit` against `power.default_limit` (180 W = 180 W, range 150 to 198 W) and the row says `limit_is_stock=yes`. Read back with `node tools/jobs.mjs run-5060ti-bench-20261007-b`. + +**Detection** (the app's first poll after the restart, run `win-1ccfe586-20261007-143611`, 14:36:16Z): `GPUs: NVIDIA GeForce RTX 5090 (CUDA); NVIDIA GeForce RTX 5060 Ti (CUDA); AMD Radeon(TM) Graphics (OpenCL, gfx1036)` and `cards: NVIDIA GeForce RTX 5090 [discrete, off] | NVIDIA GeForce RTX 5060 Ti [discrete, off] | ...`; the app started a miner on it by itself (`nvidia-1ccfe586-2`, `--device 1`, 8 identities, the default). The kind reads `discrete`, not `external`: the app does not know it is an eGPU. nvidia-smi in the job: index 1, 16,311 MiB, PCIe link gen 4 x4 current against gen 4 x16 maximum (the Thunderbolt link: a quarter of the slot's lanes), 43 C idle. The freeze lane's cause class for the 15:10 UK hang on the first boot with the card: not the card (no TDR, no Thunderbolt or PCIe link event; Kernel-Power 41 + 6008, no bugcheck, the power shape again). + +**G1 and the window** (the installed CUDA worker, `--bench --batch-log2 24 --block-warps 1`, the card alone, `CUDA_VISIBLE_DEVICES` on its UUID so every row names the device; nvidia-smi every 2 s on the card, the loaded samples at utilisation 90 percent and over): + +| Pack | Dispatches of 2^24 | Self-test | Fingerprint 2^24 at base 0 | MH/s | +|---|---|---|---|---| +| mx8-devnet-epoch0 (the class v3 control) | 5 | PASS | 90f794dd556f7a3b (= the control everywhere) | 30.895 | +| v4-devnet-epoch0 (class v4, sub-version 1, program id 1a4230699a6b9c60) | 5 | PASS | 867dbc45cfb36b4d (= Metal, Apple OpenCL, the RTX 5090) | 30.879 | +| v4-devnet-epoch0, the 10-minute window at the stock limit | 1,105 (602 s) | PASS | 867dbc45cfb36b4d | 30.882 | + +| Row | Value | +|---|---| +| NVIDIA RTX 5060 Ti 16 GB, class v4, CUDA (NVRTC), driver 610.47, PCIe 4.0 x4 through the enclosure | 30.9 MH/s over 10 minutes on the card alone | +| Watts at the stock limit (180 W default, unchanged) | 114.8 W mean, 115 W p50 over the window; 0.269 MH/W; SM 2,753 MHz, memory 13,801 MHz, 60 C maximum | +| The class v4 shadow against the control | 0.1 percent (the 5090 paid 0.2, the 9070 XT 3, the B580 0.1) | +| The efficient point | OWED to the app's Ember Tune: nothing set by the job; PC 2's Power Helper refused every request since the restart ("the helper did not run sequence 0 within 15 s", 14:39Z), so no ladder ran on either card | +| Prove beside the miner (16 GB tier) | BLOCKED, not measured: the shipped WSL2 host (sha `71bc2438...`) carries no `IGNEUM_CUDA_DEVICE` selector, so aimed at anything it proves on CUDA device 0 (the 5090) through the app's own socket `/tmp/sp1-cuda-0.sock`; the selector lives in the prover-floor host (`proof_system.rs`, branch prover-floor) and is the owed cut. The job's inventory: the floor server IS on PC 2 (`/opt/igneum-floor/bin/sp1-gpu-server`, 6.8.1 build `e911facb...`, 166,665,880 bytes) beside the stock one (`~/.sp1/bin`, `c2642ad1...`), WSL sees the card as CUDA device 1 | +| Card-picker entry (`site/yourcard.js`) | `['NVIDIA RTX 5060 Ti', 30.9]`, added; the public table row in `site/miner-bench.json` | + +Against the 5090 on the same PC (122 MH/s at 308 W, 0.396 MH/W): 25.3 percent of its hash at 37 percent of its draw, 68 percent of its hash per watt. The dependent-read ceiling was not probed (the memprobe step is not in this job); at 128 loads a hash 30.9 MH/s is 3.95 G dependent reads a second, between the 9070 XT (2.4 to 2.7 G) and the 5090 (16 to 18 G). + +Consequences per tier (the rule of 5 October 2026): a 5060 Ti owner (16 GB, Windows) mines at 30.9 MH/s and 115 W from the box with nothing to set: about 5,100 blocks a day at the 522 MH/s the devnet showed at 14:44Z (one every 17 s, approximate: the network rate moves), about a quarter of a 5090 owner's 20,200, for 2.76 kWh a day (£0.79 at 28.5 p against the 5090's £2.11); through a Thunderbolt enclosure the x4 link costs nothing measurable (the hash is bound by the card's own memory latency, not the link; the 5090's PCIe-slot rows are the comparison), so a laptop with a Thunderbolt 4 port and this enclosure is a 31 MH/s miner. The 8 GB 5060 Ti: the same hash is the expectation (the 1 GiB dataset fits), a line owed. Proving on the 16 GB tier: the fleet's 4060 Ti 16 GB row (9.0 GB peak beside the miner on the patched server) says this card would mine and prove with about 7 GB spare, approximate until the host with the device selector ships; today the app's prover default leaves it off ("a full shard needs a 24 GB card") and the measured read is owed to the prover-floor host cut. Linux and HiveOS take the same CUDA worker (owed a line). What the lane does next: the prover-floor host's selector into the shipped WSL2 bundle, then the prove-beside read on this card; the Power Helper fault on PC 2 to the Ember lane (no efficient point on any PC 2 card until it answers). + +Found on the way: inside a PowerShell `@( ... )` the comma binds before `+`, so `'--query-gpu=' + $f, '--format=csv'` is one argument (run a, void in 1 s; the query string is built first now); a bare string inside a function that also returns a value is swallowed into the caller's variable (the sampler line; `[Console]::Out.WriteLine` now); the app's `kind` for a Thunderbolt card reads `discrete` (a word for the Cards page to earn: `external`, which the state already names). diff --git a/docs/evidence.md b/docs/evidence.md index f564650f8..ca5cf0815 100644 --- a/docs/evidence.md +++ b/docs/evidence.md @@ -41,7 +41,7 @@ Versions in the table: `igneum-pow` is the Rust crate at `igneum-pow/Cargo.toml` | 14 | Ethereum bytecode runs unchanged, with the documented differences of spec 7.1 | Homepage Build card; litepaper Building | tested by the team | as row 13; fixes `F-exec-A`, `F-exec-B` (spec 7.5) | `tools/evm-smoke/smoke.mjs`: deploy via viem, `increment`, `hashLoop`, `eth_estimateGas`, `eth_getLogs`; `tools/exec-attacks` scenarios 1 and 3; bench-log "execution layer attack fixes" | Deployment, calls, reverts, logs and gas estimates behave as viem expects; chain id 4463; the prototype pgas table gives 0.0095 to 0.028 pgas per gas, below the design's band before calibration, 3 October 2026. 4 October 2026: a transaction that would cross the block's proving budget is refused by the mempool and, if forced in, aborted and charged with its nonce advanced (25 of 25 checks; 30 of 30 malformed cases). Apple M5 Max. The `Prover` precompile, proof records and the shard planner are not in the node | none yet | | 15 | Every block is proven, with the proof landing within about a minute at launch | Homepage stats ("~60 s to a proof"); litepaper Proving; roadmap phase 3 gate | implemented | repo `d7e1f89` (GPU proof), `e01a3cc`, `292e800`, `eedd136` (`proving/igneum-prove`: shard cutter, MPT witnesses, shard and aggregator guests); SP1 6.8.1; spec 7.2, 7.6 | `proving/windows-wsl2` (SETUP-PROVER, PROVE-BLOCK) on the RTX 5090; `igneum-prove-host --mode block` on `proving/fixtures/`; bench-log "proving v0 on the RTX 5090" and "proving: devnet v4 shards" | First GPU proof of an Igneum block, 4 October 2026, RTX 5090 (WSL2, SP1 cuda, mining paused): fixture `block-78-increment` (2 transactions), core proof 1.4 s (7.3 MB, verify 0.221 s), compressed proof 2.7 s (1.27 MB, verify 0.038 s), post-state and receipts roots identical to the node's; 15.7x and 20.6x faster than a loaded M5 Max CPU. The same day on that CPU (load 38 to 47): a three-shard block proved shard by shard and aggregated by recursion, 19 min (1,139 s) end to end, 245 to 337 s per compressed shard proof, every proof verified. What is not there: no proof is produced, carried or checked on the chain (the devnet prover is a stub that signs claims), the proving pool pays nobody (row 21), the block proven is far below one shard, and the 60-second figure remains a design target; the pass mark is the standard in `docs/benchmarks/proving-e2e.md`. Second RTX 5090 run, 4 October 2026 evening (job run-20261004-173115): a full shard at the provisional S_p (6.75 M pgas, 60.8 M cycles) executed in 1.63 s, core proof 8.3 s (18.1 MB), compressed proof 10.9 s (1.27 MB, verify 0.040 s); a two-shard block (13.5 M pgas) proved shard by shard (11.7 s and 10.0 s) and aggregated in 2.2 s, 24 s of GPU stages end to end, every proof verified, six tampered witnesses rejected. The two host defects (an abort after the upload, an idle wait that turned out to be an unbuffered 18 MB proof save through the WSL2 file bridge, 24 minutes) are fixed (ledger P20) 5 October 2026, live devnet with real transactions (bench-log "real transactions, the first non-empty shard proven and paid"): block 72704 shard 0, 29 transfers, 5,800 pgas, proven on PC 2 in 34 s, verified on the Mac in 0.297 s and paid 1.7623 IGN, 53 s after the chain block executed; of about 1,400 blocks in the 20-minute window 36 were proven (the one prover takes the newest shard assigned to it), so "every block" is not yet true; a second content shard (72803, all copies skipped) failed the native-execution veto on the exporter's block structure, fixed with fixtures the same day, the node side pending the 0.3.9 rollout 5 October 2026, evening (bench-log "proving v1"): the aggregated segment record, the chain rule and the unproven rule are implemented behind `proving_v1_activation_daa` (branch proving-v1, not on the devnet before 0.3.11); on the RTX 5090 a chain of 8 consecutive live blocks proved and aggregated by recursion in 135.6 s with the miner on the card (17 s a block, one proof of 1,272,909 bytes attesting all 8, verified in 0.04 s); the 3-node fast-time harness paid a segment record 1.0 s after submission and refused a late one after its deadline (21 checks); the devnet itself, with one prover, carried proofs for 2.4% of blocks over 30 minutes at a block-to-record latency p50 44 s, p99 52 s. The "within about a minute" holds per proven block; "every block" needs 18 mining 5090s or 6 proving-only cards at empty blocks on the measured rates, and the mandatory rule stays off until the share is one | none yet | | 16 | A 12 GB card proves one shard in about 20 s (WITHDRAWN 5 October 2026: a 24 GB card proves a full shard at the adopted size in 4.3 s; 32 GB mines and proves) | Litepaper Proving ("The proving budget"); roadmap gate 2 | designed | spec 5.1 (Target), 7.6 (`S_p` provisional, 7,500,000 pgas = `B_p` / 4) | `PROVE-SHARD.bat` on the RTX 5090 (pending); the end-to-end standard in `docs/benchmarks/proving-e2e.md`; bench-log "proving: devnet v4 shards" | Measured on a 32 GB card, not yet on a 12 GB card. A shard at the provisional `S_p` is 60.8 M SP1 cycles on the prototype pgas table (9 cycles per pgas, 44 per EVM gas; the modexp entry about 100x its SP1 cost); on an RTX 5090 (4 October 2026 evening, job run-20261004-173115) it executed in 1.63 s and its compressed proof took 10.9 s, verified in 0.040 s, so the 32 GB card is inside the 20 s target with margin. Whether a 12 GB card proves it at all, and in what time, is the next measurement (an RTX 3060 and an RTX 5060 Ti 16 GB are on order). A per-shard time can be met by shrinking the shard, so the project does not use it as a pass mark 5 October 2026, evening (bench-log "proving v1", the S_p curve): measured on the RTX 5090 with SP1 6.8.1's GPU prover, the card to itself, 1-s nvidia-smi samples: an empty shard 13,874 MiB and 2.2 s; a full shard at the ADOPTED v1 budget (30,000 pgas, 4.7 M cycles) 20,434 MiB and 4.3 s; the full prototype shard (6.75 M pgas, 60 M cycles) 28,307 MiB and 10.8 s; beside the miner 15,670 and 30,039 MiB. No environment knob of SP1 moves the 13.9 GB floor and the GPU server has no options of its own, so on this build a 12 GB card proves nothing, a 16 GB card only empty shards, a 24 GB card the adopted full shard alone and beside the miner (22,210 MiB and 13.2 s, measured on the 32 GB card: the 5090's allocation pattern, not yet a run on a 24 GB card) and a 32 GB card the prototype shard beside the miner with 2.5 GB spare. The litepaper line now says so; the 12 GB gate returns when a prover build with a smaller floor is measured on a 12 GB card | none yet | -| 17 | The chip resistance claim: the strongest chip in the public model reaches 5x to 9x per joule against an RTX 5090 today (modelled); class v4 brings it to 2.1x (k = 1) to 3.9x (k about 0.33, claimed by a withdrawn product) and its second rung to about 2.8x (modelled on measured watts); class v5 makes the dataset the chain's state so a stateless or stale chip is wrong on every item (designed, +0.2 ms verifier); the hot-set cache bounded at 1.067x at the ceiling (measured census of 1,024 programs) and the weak-day FPGA at most 12 percent on 12 days a century (measured census) are bounded and routed to the next class; datacentre silicon (H100 SXM, measured 7 October) does not change the question; a stored-dataset chip pays for itself only at about USD 100 M of market cap in two years (modelled) | The home page's chip line, the litepaper's chip model section, the miner page's line (the texts of `docs/plans/counter-asic-3-public-text-2026-10-07.md`) | tested by the team (every card, the verifier, the two attack-pass censuses, the H100), the chip itself modelled, class v5 and the ladder designed, the X9 core claimed and never measured | `docs/analysis/chip-model-v3.md` 5 and 6; `docs/analysis/latency-shadow-2026-10-06.md`; `docs/plans/counter-asic-3-status.md`; `docs/analysis/attack-pass/f8-uniform.md`, `f4-weakday.md`; `docs/design/class-v5-stored-state.md`; the H100 and market-cap rows of 7 October; `docs/plans/funding.md` (the three lots) | The chip model re-run on the measured class v3 and v4 rates, watts and verifier times; the hot-set census of 1,024 programs and the weak-day census of 2^24 days on the attack-pass branch; the H100 SXM bench row | 136 MH/s at 350 W (5090, bench) and 290 W (app); 27 MH/s at 21 W (M5 Max); 249 MH/s (H100 SXM) at 98 percent of its read ceiling, 1.78x hash, 1.15x MH/W, a third per rented dollar; 2.33 ms per warp; 5.1x to 9.2x; 2.1x, 3.9x, 2.8x; 1.067x at the ceiling; 12 percent on 12 days a century; 10.85 ms at rung 3; USD 100 M; 6 and 7 October 2026 | none yet; the three cryptanalysis lots are the next test | +| 17 | The chip resistance claim: at launch the strongest chip in the public model reaches 2.1x (k = 1) to 3.9x (k about 0.33) per joule against an RTX 5090 under class v4, live from genesis on the testnet and the mainnet; the ladder's second rung brings it to about 2.8x; class v5 makes the dataset the chain's state so a stateless or stale chip is wrong on every item; the hot-set cache is bounded at 1.067x at the ceiling and the weak-day FPGA at 12 percent on 12 days a century, both routed to the next class; datacentre silicon does not change the question; a stored-dataset chip pays for itself only at about USD 100 M of market cap in two years; without class v4 the same chip would reach 5x to 9x (the class v3 baseline, the devnet's starting state, never the launch state) | the home page's chip line, the litepaper's chip section (/litepaper#chip-model), the miner page's line | tested by the team (every card, the verifier, the two attack-pass bounds, the H100), the chip itself modelled, class v5 and the ladder designed, the X9 core claimed and never measured | `docs/analysis/chip-model-v3.md` 5 and 6; `docs/analysis/latency-shadow-2026-10-06.md`; `docs/plans/counter-asic-3-status.md`; `docs/analysis/attack-pass/f8-uniform.md`, `f4-weakday.md`, `docs/analysis/ca3-v4-uniform.md`; `docs/design/class-v5-stored-state.md`; the H100 and market-cap rows of 7 October; `docs/plans/cryptanalysis/in-house-pass.md` (the internal adversarial pass) | the chip model's arithmetic in its file; the card rows by the benchmark package; the attack-pass harnesses `tools/attack/f8-uniform` and the F4 census; the verifier by `igneum-pow bench` | 136 MH/s at 350 W (5090, bench) and 290 W (app); 27 MH/s at 21 W (M5 Max); 249 MH/s (H100 SXM) at 98 percent of its read ceiling, 1.78x hash, 1.15x MH/W, a third per rented dollar; 2.33 ms per warp; 2.1x, 3.9x, 2.8x at launch; 1.067x at the ceiling; 12 percent on 12 days a century; 10.85 ms at rung 3; USD 100 M; 5.1x to 9.2x the class v3 baseline; 6 and 7 October 2026, the M5 Max, PC 2's RTX 5090, PC 1's RX 9070 XT and RTX 4070, a rented H100 SXM, igneum-build-1 | none yet; the next test is the internal adversarial pass (three lanes new to the hash code, outsider inputs only, reports published whole), and the one outside check is staged and waits on its escrow and the publish word | | 18 | The chip resistance measurements: the program is latency-bound (random reads), not bandwidth-bound, on every card we own, and sits beyond a card's on-chip cache | Litepaper Mining ("waits on memory latency, not on maths or bandwidth"), vs RandomX; the numbers page | tested by the team | readwidth e752fc7 (`docs/plans/read-width.md`), ca2-era 78c0ee4, ca2-cache 2de19e5 (`docs/plans/hot-table.md`) | The dependent-read probes at 32 to 1,024 MiB and the hash rate per class on the three cards; the latency-bound share = rate over the probe ceiling per load | Latency-bound share at the 1 GiB dataset: RTX 5090 0.96 (v2) and 1.01 (v3), RX 9070 XT 0.87 and 0.95, M5 Max 1.01 and 1.06; wider reads do not close the AMD gap (the 9070 XT does 2.4 G dependent reads per second at every width; the 5090 goes bandwidth-bound at 64 B, share 0.58); a 32 to 96 MiB hot table is not kept resident by any card while the dataset streams (g 0.80 to 0.87 in the added form). 5 October 2026 | none yet | | 19 | The lottery hash is sound as a hash: uniform output, deterministic, no out-of-bounds read, fuzzed; class v3 bit-exact on the three vendors | Litepaper vs RandomX ("Every number above is measured and logged"), the numbers page | tested by the team | ca2-mixer 1ab8b21 (`tests/mixer.rs`, `tests/scratch.rs`), ca2-era 78c0ee4, ca2-soundness a465881 (`docs/analysis/scratch-soundness.md`), `igneum-pow/tests/packs.rs` | The crate suite (53 + 4 + 19 + 7), the Metal fuzz, edge, stats and determinism runs on the v3 construction, the pack vectors and 2^24 fingerprints on Metal, Apple OpenCL, the RTX 5090 and the RX 9070 XT, the 1,024-hash CPU re-check per card | Class v3 (mixer x8 + era): 200-program fuzz 200 of 200 on Metal, every tenth on Apple OpenCL; the pinned v3 packs 3/3 + 3/3 and 96 of 96 lanes on Metal and Apple OpenCL; the six era packs' fingerprints equal on the three vendors (PC 1 job run-ca2-era-pc1-20261005, 5 October 2026); the v2 exports byte-identical on the v3 crate; the final-class PC rows and the G2 re-check: job run-ca2-era-pc1b-20261005 (pending at the time of writing) | none yet | | 20 | No premine, no pre-sale, no allocation: every coin is minted by the schedule and every coin goes to the block producer (80%) and the proving pool (20%) | Homepage stats and Economics tiles; litepaper Supply, Economics | implemented | repo `6ac80a3`; fork "igneum-node devnet v0"; `consensus/core/src/igneum.rs`, `coinbase.rs` | `cargo test -p kaspa-consensus-core igneum` (8 pass: subsidy table, ramp, split, cap) and `cargo test -p kaspa-consensus coinbase` (8 pass); `igneum-miner inspect 40`; bench-log "igneum-node devnet v0" | Coinbases on the devnet: 80/20 exact on 39 of 39 single-payee blocks, the 20% to the `igneum-proving-pool-v0` output; the per-second schedule sums to under the 4,000,000,000 cap by less than 100 coins; 3,168,808,781 units per DAA second in years 0 to 2, halving at 63,115,200 DAA s. 3 October 2026, Apple M5 Max. The devnet genesis carries no allocation; the mainnet genesis does not exist yet, so the claim is about the code and the stated rule, not a launch that has happened | none yet | diff --git a/docs/fud-ledger.md b/docs/fud-ledger.md index 8f0db6099..d23f00b1c 100644 --- a/docs/fud-ledger.md +++ b/docs/fud-ledger.md @@ -299,7 +299,7 @@ Sweep (5 October 2026, evening): stated. `site/litepaper.html`, Finality ends wi ### F11. VDFs are exotic "A class-group VDF with Wesolowski proofs in a consensus-critical path, in a project with no cryptographer. Chia needed years and still got timelord ASICs." -Status: Answered by design, with the dependency conceded. +Status: Answered by design, with the dependency conceded. Update 7 October 2026 (era VDF lane): the era VDF is in the node (spec 4.4 Implemented, behind `era_vdf_activation_daa`, never until the project lead sets it per network), on a fixed-width integer with no C library, with the hash-chain fallback behind the genesis scheme byte for the day a class group's order is computable; the attack pass's F7 harness fires against the stand-in (1 of 6 cuts re-rolled at no delay) and is silent against the VDF (0 of 6); the measured rates, prove and verify times and the margin against the fastest known prover (chiavdf's AVX-512 path on the same box) are in `docs/analysis/era-vdf-2026-10-07.md`. The timelord-ASIC point is answered by the margin table of spec 4.6: the delay only has to exceed the 2-s publish window, and it does so by orders of magnitude on the fastest evaluator measured. The external review (O-4.1) is still owed. Was: Answered by design, with the dependency conceded. Answer: The VDF is used for one thing: making the hourly program unknowable within the roughly two seconds a miner has to decide whether to publish a block, closing a withhold-or-publish grind the review measured at about 130 to 1 for a 30% miner. The VDF input is a certified checkpoint at least one epoch before the epoch starts, so honest nodes have about 50 minutes of slack to evaluate a 10-minute VDF, and an evaluator 300x faster than reference would still be needed to beat the two-second decision window. Chia has run class-group VDFs in production since 2021, with faster hardware evaluators existing and not breaking it (approximate, from memory). The design doc lists the VDF as a new dependency and ships the evaluator in every node. The grinding simulation with and without the VDF is scheduled before gate 3. @@ -2435,6 +2435,35 @@ Same rule as the counts above. 167 entries. The bucket "Decided or closed by rule" counts each entry once: M8, M11 and P16 move there from Answered, so Answered is 28 less those three plus M16 and E17, as the table states; the sum of the rows is 167 with M8, M11, P16 and F3, F17 counted in Decided only. +## Round 5 entry (7 October 2026, afternoon): the class v4 load-source amendment + +### AP-F8-1. A load whose source was last written by `or`, `mul` or `mulhi` makes a cross-hash hot set +"The item histogram of class v4 over 2^26 nonces is not uniform: the top 0.1 percent of items take 0.520 percent of reads against 0.115 for a uniform control (4.05x), one item takes 78,479 reads (153x the mean), and site 15 feeds 6.37 percent of its reads into that top 0.1 percent in every iteration." (attack-pass row F8, `docs/analysis/attack-pass/f8-uniform.md`, 7 October 2026) + +Status: Fixed on a branch, pending the 0.3.20 node ship (7 October 2026, afternoon; the project lead's word 15:2x UK: option A, "do this but limit the testing, get it pushed"): `ca3-v4-amend` a0aaca92 (the generator and the packs) and 1748fd1d (the PC 2 playbook), on origin/master 5c08c6e0 plus `ca3-v4-uniform` 095f84a7 (the analysis). The node side rides `release-0.3.20-node`; the stamp is agreed with the node lane (a283f5f0d364ceef0). Was: a finding (7 October 2026, morning). + +Answer: Correct as a fault, wrong as a null. The window layer (spec 01 1.13.1 as proposed, `docs/plans/era-layout.md` 1.4) moves the uniform null from 0.115 to 0.160 percent at the top 0.1 percent (1.39x, not 4.05x) and explains every per-site row of F8's attribution except site 15. Site 15's source r6 was last written by `or r6, r4` (instruction 61, the load at 63), a non-injective op whose output bits are 1 with probability 3/4, so the all-ones source recurs with probability (3/4)^32 per read; the era map sends it to item 0xca5b92, F8's hottest item exactly, and F8's next seven items are exactly the seven one-zero-bit sources whose zero survives the window mask. The popcount model at the measured bias (p = 0.7585) predicts 77,348 all-ones reads against 78,479, and the program's top-0.1-percent share at 0.58 against 0.52. The acceptance rule's part (a) takes any write as a fresh source and part (c) counts saturation on final register values only, so the class of fault passes it: of 1,024 chain-shaped class v4 programs 96.6 percent carry a load whose source's last writer is `or`, `mul` or `mulhi`, 48.5 percent an `or`-sourced one (0.30 percent of all reads per site), 4.9 percent an `or`-of-`or` chain (p3's class: 72 percent of that site's reads, 4.6 percent of all reads, on 0.1 percent of items). The ceiling under rule (c)'s 120-of-128 floor is one site repeating its item in all 8 iterations, 6.25 percent of reads, a chip edge of at most 1.067x in 64 bytes of SRAM; the public claim's 2x margin stands, and the public line says "bounded", not "uniform" (`docs/analysis/ca3-v4-uniform.md` sections 1 to 4). + +The amendment (a0aaca92): in class v4's chain draw a load's source is drawn only from registers whose last writer injects (add, sub, xor, mad, shfl, load) or is a rotate (rotl, rotr), never one last written by `or`, `mul` or `mulhi` (`generator.rs` candidate_from_words_class, keyed on the era-composed V4_CLASS; no attempts lost, rule (a) unchanged; v2, v3 and the generator-2 ladder packs byte-identical). Split protection (the node lane's form): generator stays 4 and a generator-4 program id appends `"sub/" || PROGRAM_SUBVERSION_V4 (= 1) as little-endian u16` inside `program_id()`, so a binary from before the rule and one after it never share a program id for one seed and the node's id check catches a split; packs carry `IGNEUM_PROGRAM_SUBVERSION 1` and `"sub_version": 1`, and packcheck refuses a generator-4 pack whose sub-version is absent or other. The node side (release-0.3.20-node, built to a0aaca92): kaspa-pow's test pins 1a4230699a6b9c60 must-equal and c120d7963abdcd96 must-differ through `generator::program_id` with the suffix, and the amended class signals object byte 5 in the header (CLASS_SIGNAL_V4 = 5; the tally counts byte 5 and above), so a block of the 6 October stream (byte 4) never counts towards the flip and a byte-4 node forks alone at it; object 6 is class v5's. The seven gate packs re-exported (devnet epoch 0 and eras 0 to 5): id 1a4230699a6b9c60 (was c120d7963abdcd96, pinned as the must-differ vector in `tests/recheck.rs`), fingerprints Metal = Apple OpenCL 867dbc45cfb36b4d, 2146ecacc8c75a8e, fe52602393f6d3d4, 3b206471a13912b4, c3f03c4a5d7333aa, f1dfd7209f15bb97, 8c194da64fadf31d; the v3 control 73bcbfe8ccf988f1 / 90f794dd556f7a3b untouched; the zip of the eight packs sha256 889ec99976d2728b4b5035bfa476032e5b6a13b928968fc45236d5f25084aa39. + +Evidence: `docs/analysis/ca3-v4-uniform.md` (the model, the census `tools/ca3-v4-uniform`, the chip pricing); F8's logs under `/srv/builds/igneum-wt-attack/target-attack-f8/log/`; the tests limited by the project lead's word to what prevents a split and proves the fix: the vectors (the seven packs' ids and fingerprints above), the `igneum-pow` crate suite on igneum-build-1 at 8c728ca3 (`tools/build-remote.sh -- test --release`, rc 0, 77 s, 12:1x UTC: 61 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 100 passed, 0 failed, the pinned v2 and v3 packs byte-identical and the v4 must-equal and must-differ ids as pinned), the pairing of the fork's kaspa-pow with this igneum-pow on igneum-build-1 (PAIRING-LINE), and one G1 run on the RTX 5090 (PC 2 job run-ca3-v4-amend-g1-pc2-20261007, 09:41:07 to 09:41:28Z, exit 0, the installed 0.3.17 worker sha256 14b6637e..., NVRTC, beside the app's miner, the prover on, the lock held 09:40:22 to 09:41:51Z): self-test PASS on all eight packs and every 2^24 fingerprint equal to the Mac's (the seven above and the control 90f794dd556f7a3b), NVRTC 188 to 332 ms per pack, the 1 GiB build 38 to 49 ms. + +Sub-version 2 (7 October 2026, afternoon; main's ruling B2: 0.3.20 ships sub-version 1 as object byte 5 untouched, and sub-version 2 is object byte 7, built on this branch at 07a809a7): the attack-pass lane's F8 census on sub-version 1 (64 chain-shaped seeds, the window-model control, 2^24 nonces) read 53 of 64 PASS and 11 FAIL at 1.2x, worst p31 at 29.27x, and named three residual classes, all a constant delivered through a writer the one-writer rule admits: saturation or zero preserved through rotl, rotr or a load after a saturated load (p6, p23, p26, p31, p34), zero from mulhi (p45), and the iteration boundary (an `or` at 63 feeding a load at 1, p11); p4, p10 and p25 at 1.28x to 1.57x are the window model's own tail. (An F9 hot-set census read on the same day was withdrawn by its author: its harness drew outside the rule and its metric counted the era's designed windows as hot; F8 is the one re-gate instrument.) Sub-version 2 closes the three: the draw takes a load's source only from a register fresh by dataflow (fresh at the start; a load keeps freshness only from a fresh source; add, sub, xor, mad, shfl from either operand; rotl, rotr from their operand; or, mul, mulhi never), keyed on the class v4 shape on every draw path; rule (a') of the acceptance rule runs that freshness to its fixpoint over the loop (base then shadow block) and rejects a candidate whose load reads an unfresh register in the steady state; rule (c') counts, per load site, the source values equal to 0 or all-ones over the 64 units' 16,384 evaluations and rejects at 164 or more. The devnet epoch-0 seed's attempt 0 is rejected and attempt 1 accepted: id a788661687db4bb3 (c120d7963abdcd96 and 1a4230699a6b9c60 the must-differ pair), fingerprints Metal = Apple OpenCL e370fb2080b7dbb1, b7237555d31fc3cf, b6b167fa15dfe2c9, 28bdf65eff33f2c4, e26d38c46f3f1b16, dd8fdf6ff4f59eed, 8bf40f5cb858d835 (13:01Z), the packs zip sha256 69c36772cd79e44e2ddd589466d9c64a94a13c9e970e9f27bd76feabb9b4581b; the seven 256-block ladder packs of `packs-ca3-shadow` re-exported under the rule (their measured rates stand as the old stream's). Nothing is proposed for sub-version 2 until the attack-pass lane's two gates on 07a809a7 are green (the 64-seed census under 1.2x on every seed, the hot-set census on the chain path); its suite, pairing (after the node lane's re-pin to byte 7) and G1 lines are added below as they land. The static census (`tools/ca3-v4-uniform`, box 2, 13:12Z) over 1,024 chain-shaped seeds plus F8's p1 to p3 at sub-version 2: 0 lossy-sourced load sites of 16,432 (14,329 injecting, 2,103 bijective), 0 programs with an `or`-, `mul`- or `mulhi`-sourced load, the no-era draw path giving the devnet epoch-0 seed the pack's own id a788661687db4bb3 (one stream on every path); the cost of rules (a') and (c'): 1.99 attempts per seed on average against 0.05 before (p2's seed took five), which is 2 ms of generation per rejected attempt on one core, nothing a miner or node notices. The crate suite at 526fa757 on box 2 (`tools/build-remote.sh --box 2 -- test --release`, route line "box 2 for class suite, priority normal", rc 0, 66 s, 13:15Z): 61 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 100 passed, 0 failed, the pinned v2 and v3 packs byte-identical and the three v4 ids as pinned (a788661687db4bb3 equal; c120d7963abdcd96 and 1a4230699a6b9c60 differ). + +AP-F8-2 (7 October 2026, 13:xx UTC, the attack-pass lane on sub-version 2 at 07a809a7): chain-shaped seed igneum-f9/331672 exhausted the 32 attempts under rule (a') and the generator panicked, which on the chain is an epoch no node can draw, a liveness halt; the measured (a') plus (c') rejection rate of about two thirds per attempt puts the exhaustion probability at about (2/3)^32, 2e-6 per epoch seed (sub-version 1 exhausted 0 of 10^6). Main's ruling: the draw is total and no consensus path panics. Fixed at 8bdcbdd8 with the stream unchanged (re-export diff 0; the id a788661687db4bb3 and the fingerprints stand, so sub-version 2 keeps its number and the running censuses): the attempt cap of the class v4 shape is 256 (`MAX_ATTEMPTS_V4`; v2 and v3 keep 32), which puts the exhaustion probability under 1e-45 at a worst-case draw of about half a second on one core; after the cap the seed takes the last-resort program, deterministic and accepted as drawn, the candidate at attempt 256 with every `or`, `mul` and `mulhi` of the base program and the shadow block rewritten to `xor`, so every register stays fresh from the init words on and rule (a') holds by construction. The spec text for class v4 therefore reads: attempts 0 to 255 under rules (a), (b), (a'), (c) and (c'), then the last-resort program; the probability of reaching it is (r)^256 for a per-attempt rejection rate r, under 1e-45 at the measured r of about 2/3. Tests: `class_v4_draw_is_total_with_the_last_resort` (the last resort on real (a')-rejected candidates, every load fresh after it, no lossy op left, the chain path over 64 seeds without a panic, the cap per class). The 10^6-seed exhaustion count at the fixed commit is the attack-pass lane's measurement (its re-gate string is 8bdcbdd8); the 4,096-seed census with the attempt histogram (box 2, 13:33Z, `tools/ca3-v4-uniform --n 4096 --f8` at 8bdcbdd8): 4,099 chain-shaped programs, 0 lossy-sourced load sites of 65,584 (57,304 injecting, 8,280 bijective), 0 exhaustions, the accepted attempt geometric with ratio 0.674 (1,338 at attempt 0, 921, 620, 408, 274, 189, 127, 75, 55, 40, 16, 11, 12, 6, 5, then one each at 16 and 17; mean 1.98), so the measured per-attempt rejection rate is r = 0.674 and the exhaustion probability is 0.674^32 = 3e-6 under the old cap and 0.674^256 = 1e-44 under the class v4 cap. The crate suite at 8bdcbdd8 on box 2 (route line "box 2 for class suite, priority normal", rc 0, 80 s, 13:31Z): 62 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 101 passed, 0 failed, the total-draw test included. G1 for sub-version 2 on a fleet RTX 5090 (main's order; the fleet lane, p1-5090, driver 580.173.02, sm_120, the box's Linux NVRTC worker `igneum-worker-cuda 1.0 (4 October 2026)` sha256 97e036e2..., which carries no program and compiles each pack's own text; the kit zip sha256 asserted before the put; 13:43:22 to 13:44:07Z): `--bench --batches 5 --batch-log2 24 --block-warps 1` on all eight packs, self-test PASS on every pack with the cache FNV 448274a57f508cbc and every 2^24 fingerprint equal to the Mac's (the control 90f794dd556f7a3b and the seven above); the rates (120 to 142 MH/s beside the box's own miner loop) are a reference only. The Windows G1 on PC 2 (job run-ca3-v4-sub2-g1-pc2-20261007b, published 13:46:33Z under the PC 2 lock, ran 13:46:36 to 13:46:50Z, exit 0; app 0.3.19, the installed worker sha256 14b6637e..., the RTX 5090 switched off by the runner's --cards-off before the script and restored on exit, igneum-worker-cuda running 0 before and after, the prover untouched): self-test PASS on all eight packs with the cache FNV 448274a57f508cbc, every 2^24 fingerprint equal to the Mac's and the fleet's (the control 90f794dd556f7a3b and the seven above), NVRTC 197 to 317 ms per pack, the 1 GiB build 22 to 34 ms, 115 to 130 MH/s with the card alone (a reference, 5 batches). + +AP-F8-2, the exhaustion half, FIXED-AND-PASSED at 8bdcbdd8 on the attack-pass lane's 10^6 chain-shaped seeds through the chain path (14:03:53Z): 0 exhausted, 0 panics, 4 seeds past attempt 31 (three at 32, one at 35; 4e-6, inside (2/3)^32), max attempt 35, no seed at the last resort; r = 0.67, mean 2.0 attempts per seed. + +Sub-version 2's hot-set half did not read green: F8's 64-seed gate at 39 of 64 had 8 over 1.2x of the window model (p23 4.82x, p19 3.32x, p15 2.57x, p18 2.50x, p34 1.25x; p4, p8, p10 unattributed at 1.22x to 1.50x). AP-F8-3 (7 October 2026, 14:0x UTC, the hash lane): the cause of the whole residual is that `accept.rs` never executed the latency-shadow block. Its interpreter (`run_unit`) was written for class v2 and v3 and ran the 64 base instructions per iteration and nothing after instruction 63, while the hash (`verify.rs`, the kernels) runs the shadow 27 times at the end of every iteration; so every dynamic acceptance test (c), (c') judged a class v4 program the chain never hashes. Main's word (14:1x UTC): 0.3.21 ships object byte 5 (sub-version 1); sub-version 3 is 0.3.22's and starts with this fix. Sub-version 3, first commit: `run_unit` executes the shadow block after instruction 63 of every iteration, `reps` times with the iteration's sel, as the hash does; the test `acceptance_executes_the_shadow_block_as_the_verifier_does` pins the acceptance's execution to `verify.rs` on the devnet epoch-0 program and the six test eras (the output bit counts over the 64 units equal, and different with the shadow stripped), so the two paths cannot diverge silently again; `PROGRAM_SUBVERSION_V4` = 3 (a new acceptance verdict is a new stream); the devnet epoch-0 seed still accepts at attempt 1, so its program and fingerprint are sub-version 2's (e370fb2080b7dbb1) under the new id a785001687d8688a (the must-differ set: c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3); the packs zip sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154. The class behind p23, localised from its program and reproduced in the acceptance's own execution: site 7 (instruction 38) reads r6 after 25 `mulhi r6`, 31 `or r6 |= r4`, 35 `xor r6 ^= r4`, which is `r6 & ~r4`, an AND mask the lineage rule counted as fresh because the xor's operand is the or's; over 2^20 evaluations on the closed-form words site 7 reads 874,953 distinct word indices against about 1,046,500 for every other site (0.84 of uniform; 2.2 s on one core), over 2^24 8,979,203 against about 16,260,000 (0.55; 35 s). The second sub-version 3 commit (held, prepared in the worktree) is a per-site distinct-index ratio against the uniform expectation of the site's window, its threshold set from the clean seeds' spread and its sample size from the cost line above; the dynamic bounds as first specified (a most-repeated-value bound at 16,384 and a distinct floor at 2^19.5 over 2^20) do not reach p23 and are not committed. The crate suite at ddacfbd3 on box 2 (route "box 2 for class suite, priority normal", rc 0, 41 s, 14:20Z): 63 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 102 passed, 0 failed, the agreement test included. F8's final 64-seed table on sub-version 2 (the attack-pass lane, 14:2x UTC): 9 over 1.2x (p23 4.82x, p19 3.32x, p15 2.57x, p18 2.50x, p56 2.01x, p10 1.50x, p8 1.38x, p34 1.25x, p4 1.22x), the 55 clean seeds at 0.9915x to 1.144x; the 256-item bucket entropy over the window separates the strong four only (0.637 to 0.974 against a clean minimum of 0.9865 over 848 site rows), so the threshold of the second commit's distinct-index ratio comes from a run of that ratio on the 55 clean seeds at 2^20. The static census at ddacfbd3 (box 2, 14:22Z, 4,096 chain-shaped seeds plus F8's p1 to p3): 4,099 programs, 0 lossy-sourced load sites of 65,584, 0 exhaustions, the accepted attempt geometric as before (1,328 at attempt 0, 917, 622, 409, 284, ... one each at 16 and 17; mean 1.998, max 17), so the shadow-executed verdicts move a handful of seeds' attempts and nothing else; the devnet epoch-0 seed at attempt 1, id a785001687d8688a. + +Sub-version 3, second commit (7 October 2026, 14:44 UTC, the hash lane; the sub-version number stays 3 and the stream is unchanged: re-export diff 0 on the eight packs, the id a785001687d8688a, the seven fingerprints and the zip sha256 stand), two rules. The shared-operand rule, in the draw's source rule and in the acceptance's (a') pass: or-then-xor or or-then-sub on one operand is `d & ~s`, xor-then-or is `d | s`, so the second write leaves the register lossy although either op alone injects; any write to either register clears the relation. On p23 the chain's attempt 1 (id d65122675f16a1c7) now draws site 7 (instruction 38) from r5 and passes; the devnet epoch-0 seed still draws attempt 1, the same program. Rule (c''), the distinct-index ratio: over 4,096 units (2^20 evaluations per site, the closed-form words, the shadow executed) every load site's count of distinct word indices against the uniform expectation on its window (N - N^2 / 2W, the window 2^28 >> min(win, 2)) must reach 0.98 (`MIN_DISTINCT_RATIO_V4`), the last test of the chosen candidate; a candidate under it is rejected and the next attempt drawn under the 256 cap and the last resort. The floor from the 64-seed run at 2^20 (box 2): the 55 clean seeds' minimum over their site rows 0.9960 (p1 0.9990, median 1.0000); the strong five p23 0.8361, p18 0.9274, p19 0.9335, p15 0.9432, p56 0.9654; 0.98 sits 0.015 from each side. The chain's own candidates it refuses (the test `class_v4_distinct_ratio_rejects_the_low_entropy_band`, box 2, 2.1 to 2.2 s each): p15 attempt 3 id 52638ea2e8b0fd68 site 2 at 0.943, p18 attempt 2 id 9a37e9489d8ba698 site 6 at 0.927, p19 attempt 0 id 79d7441de0689223 site 15 at 0.933, p56 attempt 2 id 486a8ad2701ec3b5 site 2 at 0.965; p23's attempt 1 with site 7 put back to r6 is refused by (a') (`UnfreshLoadSource`) and, run anyway, by the ratio at 0.836 (874,928 distinct of 1,048,576). Main's rule for a staged 2^24 pass (taken only if 2^24 separates the weak four from the clean seeds by at least the 2^20 gap) was decided by the 2^24 lines (box 2, 35 s per seed on one core): the weak four p34 0.9181, p4 0.9614, p8 0.9630, p10 0.9612; the clean seeds p44 0.9612, p52 0.9613, p3 0.9971, p2 and p5 1.0004; p23's attempt 1 1.0004. Two clean seeds sit on the weak four's value, so a 2^24 floor that reaches the weak four rejects clean seeds, and the 0.961 that recurs on both sides is a band the ratio reads at 2^24 that F8's hot-set gate did not flag on p44 or p52. Committed: the ratio at 0.98 over 2^20 alone (`ACCEPT_UNITS_DISTINCT_V4` = 4096), no 2^24 stage. Open tail: p4, p8, p10 and p34 (1.22x to 1.50x on F8's gate) read 0.9927 to 0.9963 at 2^20, inside the clean spread; unattributed and chased. The (B) most-repeated-value bound stays in the file unwired (`MAX_SOURCE_REPEAT_V4`, `most_repeated`). Cost: the chosen candidate's acceptance gains one 2^20 pass, 2.1 to 2.2 s on one box-2 core, once per epoch draw per node. + +The second sub-version 3 commit is 017e70376489251e18564c0abce7e466e606c8b3 (pushed 15:10 UTC's preceding hour, pre-push gate GREEN, CI run 37639406567 success). The crate suite at 017e7037 on box 2 (rc 0, 184 s): 64 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch = 103 passed, 0 failed, 3 diagnostics ignored; the lib tests took 140.8 s against ddacfbd3's 41 s for the whole suite, because every class v4 draw in the tests now pays the 2^20 pass on its chosen candidate (2.2 s each); that is CI time, not node time. The static census at 017e7037 (box 2, 15:1x UTC, 4,096 chain-shaped seeds plus F8's p1 to p3, the draws in parallel over the box's cores since the ratio pass makes the serial run a four-hour job): 4,099 programs, 0 lossy-sourced load sites of 65,584 (57,322 inject, 8,262 bijective), 0 exhaustions; the accepted attempt 1,297 at attempt 0, 899, 609, 416, 298, 197, 125, 92, 54, 46, 21, 14, 13, 9, 6, 0, 2, 1 (mean 2.086, max 17) against ddacfbd3's 1,328, 917, 622, 409, 284, ... (mean 1.998, max 17): the ratio refuses about 4 percent of the candidates that pass every other test, one more attempt on about one seed in twelve; the devnet epoch-0 seed at attempt 1, id a785001687d8688a; F8's p2 at attempt 5, p3 at attempt 1. The attack-pass lane's class check of ddacfbd3's shadow-executed verdicts against 8bdcbdd8 (598,678 chain-shaped seeds): 11,990 (2.0 percent) accept at a different attempt, 0 exhausted, max attempt 32; on 017e7037 the pairing holds (the devnet epoch-0 program draws as a785001687d8688a) and its 64-seed gate at 2^24 and 10^6 exhaustion count were running at 15:1x UTC (finish about 16:05 UTC). + +F8's 64-seed gate on 017e7037 (the attack-pass lane, box 2, last seed 16:00:20 UTC): 60 of 64 under 1.2x; the four over are the named tail and nothing else (p10 1.5036x, p8 1.3776x, p34 1.2505x, p4 1.2167x; hottest items 355 to 541 reads of 2^31, unattributed, inside the ratio's clean spread); p23, p19, p15, p18 and p56 under the line; the clean spread 0.9915x to 1.144x. Exhaustion on 017e7037: 0 in the attack-pass lane's 20,532 chain-shaped seeds (max attempt 29) plus this lane's 4,099 (max 17); the 10^6 count continues as a strengthening line. Cost line for the node: the chain's epoch draw now pays the 2^20 ratio pass on every candidate that reaches it (the accepted one, and the about 4 percent that fail there), 2.2 s per pass on one box-2 core, so about 2.3 s per epoch draw on that core and, by the attack-pass lane's reading, about 4 to 5 s per epoch per node on slower cores; the earlier rejections cost milliseconds. From the attack-pass lane sub-version 3 at 017e7037 reads green on both gates with the named tail; its close line went to the plan, main and the Counter ASIC lane. This row stays open on the tail (p4, p8, p10, p34) until it is attributed or ruled accepted. + +Owed (recorded, not run, by the project lead's word): G2 (the CPU verifier on 1,024 hashes per card) on the amended stream; G3 (the Metal fuzz, edge, stats and determinism runs) on the amended stream; the hash-rate ladder re-measure on the M5 Max and the RTX 5090 (the amendment changes the base program's source draws, not the op mix or the load count, so the latency-bound rows of `docs/analysis/latency-shadow-2026-10-06.md` are expected to hold within their spread; unmeasured); AMD (the RX 9070 XT, PC 1); the 2019-class verifier core (O-1.14); F8's phase E (the 64-seed dynamic census) on the amended stream, which is the attack-pass lane's and the test of the per-op table. The row reads FIXED-AND-PASSED only after phase E passes against the amended class. + ## Genesis forward-compatibility entries (7 October 2026, mission item 8, branch `genesis-forward`) The three genesis fields of `docs/analysis/mission/mission.md` section 2.8, built on the node fork branch `genesis-forward` (from release-0.3.19-node dc141409) and the repo branch `genesis-forward`; the design and the gates in `docs/design/genesis-forward.md`. Every switch is never on the devnet (its digest c562d70e... does not move); the testnet genesis sets all three (the testnet lane re-pins and re-digests). diff --git a/docs/plans/counter-asic-3-public-text-2026-10-07.md b/docs/plans/counter-asic-3-public-text-2026-10-07.md index c72a29649..ff0288f97 100644 --- a/docs/plans/counter-asic-3-public-text-2026-10-07.md +++ b/docs/plans/counter-asic-3-public-text-2026-10-07.md @@ -1,33 +1,33 @@ -# The chip claim, public text (7 October 2026, 14:3x UK, on the project lead's "this needs updating with all of our updates"; served since 11:03 UK on master 9162c847 with main's two cuts: no mention of the disclosure prize until the publish word, and row 17 in evidence.md's eight-column shape) +# The chip claim, public text (7 October 2026; REWRITTEN LAUNCH-FIRST 18:3x UK on the project lead's "I thought we were making it 2.1 from launch?": the testnet and mainnet objects set program_class_v4_activation_daa to 0, so class v4 is live from genesis and the launch number is 2.1x to 3.9x on day one; the 5x to 9x is the class v3 baseline the work started from, stated only as that; the devnet's own activation height is a devnet fact only. Served since 11:03 UK on master 9162c847 with main's two cuts: no mention of the disclosure prize until the publish word, and row 17 in evidence.md's eight-column shape) Three texts and one ledger row, written by the Counter ASIC lane, which owns the chip model. Every number carries its label: measured (a card or a chain we ran, with the date), modelled (arithmetic on cited parts), claimed (a vendor's figure, never measured by us), designed (a rule in a class, not yet measured). Sources: `docs/analysis/chip-model-v3.md` sections 5 and 6, `docs/analysis/latency-shadow-2026-10-06.md`, `docs/plans/counter-asic-3-status.md`, `docs/analysis/attack-pass/f8-uniform.md` and `f4-weakday.md` (branch attack-pass), `docs/design/class-v5-stored-state.md`, the datacentre and market-cap rows of 7 October (lanes 3 and the fleet), the cryptanalysis plan in `docs/plans/funding.md`. ## 1. The home page's chip line (replaces the hero sentence served since 6 October 16:21Z) -Built for graphics cards. In our public model the strongest chip reaches 5x to 9x per joule against an RTX 5090 today; class v4, now on the vote, brings that to 2.1x to 3.9x, and class v5 makes the dataset the chain's own state, so a chip that stores it or recomputes it is wrong on every item. The model and every measurement are public. +Built for graphics cards. At launch the strongest chip in our public model reaches 2.1x to 3.9x per joule against an RTX 5090, under class v4 from the first block. Class v5 then makes the dataset the chain's own state, so a chip that stores it or recomputes it is wrong on every item. Without class v4 the same chip would reach 5x to 9x. The model and every measurement are public. ## 2. The litepaper's chip section (replaces the paragraph that begins "The chip model: 5x to 9x per joule") -The chip model. We price the strongest chip we can design against an RTX 5090 and publish the arithmetic. The honest card: an RTX 5090 mines class v3 at 136 MH/s on 350 W in the bench and 290 W in the app (measured, 6 October 2026); an Apple M5 Max at 27 MH/s on 21 W (measured, 6 October 2026); an H100 SXM at 249 MH/s, 98 percent of its random-read ceiling like the 5090, 1.78x the 5090's hash at 1.15x the tuned 5090's hash per watt and a third of the hash per rented dollar (measured, 7 October 2026), so datacentre silicon does not change the chip question. The CPU verifier takes 2.33 ms per warp of 32 hashes on one M5 Max core under class v4 (measured, 6 October 2026), against a gate of 10 ms. +The chip model. We price the strongest chip we can design against an RTX 5090 and publish the arithmetic. Class v4 is live from the first block on the testnet and the mainnet (the ladder's rung 0 at genesis), so the launch number is the class v4 row. The honest card: an RTX 5090 mines class v3 at 136 MH/s on 350 W in the bench and 290 W in the app (measured, 6 October 2026); an Apple M5 Max at 27 MH/s on 21 W (measured, 6 October 2026); an H100 SXM at 249 MH/s, 98 percent of its random-read ceiling like the 5090, 1.78x the 5090's hash at 1.15x the tuned 5090's hash per watt and a third of the hash per rented dollar (measured, 7 October 2026), so datacentre silicon does not change the chip question. The CPU verifier takes 2.33 ms per warp of 32 hashes on one M5 Max core under class v4 (measured, 6 October 2026), against a gate of 10 ms. | The chip and the class | Edge over an RTX 5090 per joule | Label and date | |---|---|---| -| A memory-controller chip that stores the whole dataset (the Ethash class), class v3 | 5x to 9x (5.1x on GDDR7, 9.2x on eight HBM3 stacks; the Ethash chips of this class reached 2.1x to 4.8x) | modelled, 6 October 2026; the precedent measured by others, 2020 to 2022 | -| The same chip under class v4 (about 100,000 integer ops per hash in the latency shadow, so the chip carries a GPU-class datapath beside its memory) | 2.1x with a core as costly per op as the GPU's (k = 1); 3.9x with the core Bitmain claimed for its Antminer X9 (k about 0.33), a product withdrawn before any unit shipped | modelled on measured card watts, 6 October 2026; the X9 figure claimed, never measured | -| The same chip at the ladder's second rung (about 200,000 ops per hash) | about 2.8x | modelled, 7 October 2026 | +| At launch: a memory-controller chip that stores the whole dataset, under class v4 (about 100,000 integer ops per hash in the latency shadow, so the chip carries a GPU-class datapath beside its memory) | 2.1x with a core as costly per op as the GPU's (k = 1); 3.9x with the core Bitmain claimed for its Antminer X9 (k about 0.33), a product withdrawn before any unit shipped | modelled on measured card watts, 6 October 2026; the X9 figure claimed, never measured | +| The same chip at the ladder's second rung (about 200,000 ops per hash), reached by miner signal | about 2.8x | modelled, 7 October 2026 | | Any chip under class v5, where the dataset is the chain's own state | a stateless or stale chip is wrong on every item, so the stored-dataset chip and the recompute chip are removed as categories; the verifier pays 0.2 ms more per warp | designed, 7 October 2026 | | A chip caching the hottest 0.1 percent of items (about 1 MB of SRAM) | bounded at 1.067x at the ceiling, 1.005x on about half the hours and 1.048x on 5 percent | measured census of 1,024 programs, 7 October 2026; the source rule in the next class | | A per-day FPGA that recomputes the dataset with cheap multipliers on a weak day | at most 12 percent more hash rate on 12 days a century, nothing on the other days and nothing for any chip | measured census of 2^24 days, 7 October 2026; the rule in the next class | | When a stored-dataset chip pays for itself | at about USD 100 M of market cap in the first two years, not before | modelled, 7 October 2026 | +| The baseline the work started from: the same chip under class v3, without the shadow (the Ethash class) | 5x to 9x (5.1x on GDDR7, 9.2x on eight HBM3 stacks; the Ethash chips of this class reached 2.1x to 4.8x) | modelled, 6 October 2026; the precedent measured by others, 2020 to 2022; never the launch state | -What a miner sees from this. Class v4 costs a 5090 about 80 W more for 0.2 percent of rate, an M5 Max 16 W more for 1.5 percent, an RX 9070 XT and an RTX 4070 nothing (all measured, 6 October 2026). The ladder that sets how much work rides in the shadow starts at rung 0 at the testnet genesis and climbs by miner signal; its third rung is inadmissible today because a server core verifies it in 10.85 ms, over the gate (measured, 7 October 2026). The next test of the model is not ours: the cryptanalysis plan buys three external lots against the mixer, the chained cache and the acceptance rule. +What a miner sees from this. Class v4 costs a 5090 about 80 W more for 0.2 percent of rate, an M5 Max 16 W more for 1.5 percent, an RX 9070 XT and an RTX 4070 nothing (all measured, 6 October 2026). The ladder that sets how much work rides in the shadow starts at rung 0 at genesis and climbs by miner signal; its third rung is inadmissible today because a server core verifies it in 10.85 ms, over the gate (measured, 7 October 2026). On the devnet, which started on class v3, class v4 arrives by miner signal at a published height (a devnet fact, not a launch one). The next test of the model is an internal adversarial pass, not an independent review: three lanes that have never worked on the hash code attack the mixer, the chained cache and the acceptance rule with only what an outsider has (the public kit, the frozen object, the spec, the harnesses) and publish the break or the bound they reach. The one outside check is staged and waits on its escrow and the publish word. ## 3. The miner page's line -Your card against the strongest chip we can price: an RTX 5090 at 136 MH/s on 350 W (measured 6 October 2026), the chip 5x to 9x per joule in the public model today, 2.1x to 3.9x under class v4 (modelled on measured watts), and under class v5 wrong on every item because the dataset is the chain's own state (designed); the model and the measurements are public. +Your card against the strongest chip we can price: an RTX 5090 at 136 MH/s on 350 W (measured 6 October 2026); at launch the chip reaches 2.1x to 3.9x per joule under class v4 (modelled on measured watts), and under class v5 it is wrong on every item because the dataset is the chain's own state (designed). Without class v4 it would be 5x to 9x. The model and the measurements are public. ## 4. The ledger row (docs/evidence.md row 17, in the table's eight columns as served) | # | Claim | Where it is made | Status | Version or commit | Reproducible test | Result, date, machine | Independent verification | |---|---|---|---|---|---|---|---| -| 17 | The chip resistance claim: the strongest chip in the public model reaches 5x to 9x per joule against an RTX 5090 today; class v4 brings it to 2.1x (k = 1) to 3.9x (k about 0.33) and its second rung to about 2.8x; class v5 makes the dataset the chain's state so a stateless or stale chip is wrong on every item; the hot-set cache is bounded at 1.067x at the ceiling and the weak-day FPGA at 12 percent on 12 days a century, both routed to the next class; datacentre silicon does not change the question; a stored-dataset chip pays for itself only at about USD 100 M of market cap in two years | the home page's chip line, the litepaper's chip section (/litepaper#chip-model), the miner page's line | tested by the team (every card, the verifier, the two attack-pass bounds, the H100), the chip itself modelled, class v5 and the ladder designed, the X9 core claimed and never measured | `docs/analysis/chip-model-v3.md` 5 and 6; `docs/analysis/latency-shadow-2026-10-06.md`; `docs/plans/counter-asic-3-status.md`; `docs/analysis/attack-pass/f8-uniform.md`, `f4-weakday.md`, `docs/analysis/ca3-v4-uniform.md`; `docs/design/class-v5-stored-state.md`; the H100 and market-cap rows of 7 October; `docs/plans/funding.md` (the three lots) | the chip model's arithmetic in its file; the card rows by the benchmark package; the attack-pass harnesses `tools/attack/f8-uniform` and the F4 census; the verifier by `igneum-pow bench` | 136 MH/s at 350 W (5090, bench) and 290 W (app); 27 MH/s at 21 W (M5 Max); 249 MH/s (H100 SXM) at 98 percent of its read ceiling, 1.78x hash, 1.15x MH/W, a third per rented dollar; 2.33 ms per warp; 5.1x to 9.2x; 2.1x, 3.9x, 2.8x; 1.067x at the ceiling; 12 percent on 12 days a century; 10.85 ms at rung 3; USD 100 M; 6 and 7 October 2026, the M5 Max, PC 2's RTX 5090, PC 1's RX 9070 XT and RTX 4070, a rented H100 SXM, igneum-build-1 | none yet; the three cryptanalysis lots are the next test | +| 17 | The chip resistance claim: at launch the strongest chip in the public model reaches 2.1x (k = 1) to 3.9x (k about 0.33) per joule against an RTX 5090 under class v4, live from genesis on the testnet and the mainnet; the ladder's second rung brings it to about 2.8x; class v5 makes the dataset the chain's state so a stateless or stale chip is wrong on every item; the hot-set cache is bounded at 1.067x at the ceiling and the weak-day FPGA at 12 percent on 12 days a century, both routed to the next class; datacentre silicon does not change the question; a stored-dataset chip pays for itself only at about USD 100 M of market cap in two years; without class v4 the same chip would reach 5x to 9x (the class v3 baseline, the devnet's starting state, never the launch state) | the home page's chip line, the litepaper's chip section (/litepaper#chip-model), the miner page's line | tested by the team (every card, the verifier, the two attack-pass bounds, the H100), the chip itself modelled, class v5 and the ladder designed, the X9 core claimed and never measured | `docs/analysis/chip-model-v3.md` 5 and 6; `docs/analysis/latency-shadow-2026-10-06.md`; `docs/plans/counter-asic-3-status.md`; `docs/analysis/attack-pass/f8-uniform.md`, `f4-weakday.md`, `docs/analysis/ca3-v4-uniform.md`; `docs/design/class-v5-stored-state.md`; the H100 and market-cap rows of 7 October; `docs/plans/cryptanalysis/in-house-pass.md` (the internal adversarial pass) | the chip model's arithmetic in its file; the card rows by the benchmark package; the attack-pass harnesses `tools/attack/f8-uniform` and the F4 census; the verifier by `igneum-pow bench` | 136 MH/s at 350 W (5090, bench) and 290 W (app); 27 MH/s at 21 W (M5 Max); 249 MH/s (H100 SXM) at 98 percent of its read ceiling, 1.78x hash, 1.15x MH/W, a third per rented dollar; 2.33 ms per warp; 2.1x, 3.9x, 2.8x at launch; 1.067x at the ceiling; 12 percent on 12 days a century; 10.85 ms at rung 3; USD 100 M; 5.1x to 9.2x the class v3 baseline; 6 and 7 October 2026, the M5 Max, PC 2's RTX 5090, PC 1's RX 9070 XT and RTX 4070, a rented H100 SXM, igneum-build-1 | none yet; the next test is the internal adversarial pass (three lanes new to the hash code, outsider inputs only, reports published whole), and the one outside check is staged and waits on its escrow and the publish word | diff --git a/docs/plans/counter-asic-3-status.md b/docs/plans/counter-asic-3-status.md index f4c518d58..6aa40c8b2 100644 --- a/docs/plans/counter-asic-3-status.md +++ b/docs/plans/counter-asic-3-status.md @@ -411,7 +411,19 @@ Self-test PASS on every pack (cache FNV 448274a57f508cbc); both rows in the ledg | p34 | 1.25x | | site 1, 1.35 percent | | | p4 | 1.22x | | site 1, 1.45 percent | unattributed, 1.57x on sub-version 1 | -Every failing seed is ONE low-entropy load site; the mechanism is lineage-blind (AP-F8-1's residual) and the acceptance could not see it because it never ran the shadow block (AP-F8-3). SUB-VERSION 3's FIRST COMMIT: ca3-v4-amend ddacfbd3, 14:20:37Z (origin and build, gate GREEN): the acceptance executes the shadow block as the hash does, the test pins it to verify.rs on the seven v4 programs; PROGRAM_SUBVERSION_V4 = 3; byte 7; (A) and (B) held in a stash. Epoch-0 id a785001687d8688a (must-differ c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3; the devnet seed still accepts at attempt 1, so its program is sub-version 2's under the new id); the seven fingerprints unchanged from sub-version 2 for the same reason (e370fb2080b7dbb1, b7237555d31fc3cf, b6b167fa15dfe2c9, 28bdf65eff33f2c4, e26d38c46f3f1b16, dd8fdf6ff4f59eed, 8bf40f5cb858d835; control 90f794dd556f7a3b; Metal = Apple OpenCL 14:18:41 to 14:19:13Z), so the fleet and PC 2 G1s already read them and the G1 on sub-version 3's packs is a re-run of a known result; packs zip packs-ca3-v4-sub3 sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154; the ledger entry carries AP-F8-2's exhaustion half FIXED-AND-PASSED at 8bdcbdd8 and AP-F8-3 fixed here; the suite and the 4,096-seed census at ddacfbd3 on box 2. THE LOCALISATION (the hash lane): p23's band is dataset- and nonce-independent and reproduces in the acceptance's own execution: site 7 (instruction 38) reads r6 after 25 mulhi, 31 or r6 |= r4, 35 xor r6 ^= r4, which is r6 and not r4, an AND mask the lineage rule counts as fresh because the xor's operand is the or's; over 2^20 evaluations on the closed-form words site 7 reads 874,953 distinct word indices against about 1,046,500 at every other site (0.84 of uniform, 2.2 s on one box-2 core); over 2^24, 8,979,203 against about 16,260,000 (0.55, 35 s). THE COST LINES FOR THE SECOND COMMIT (0.3.22): structural (an abstract value class tracking shared operands) 0 s per attempt, this idiom only; the distinct-index ratio at 2^20 2.2 s per chosen candidate; at 2^24 35 s; no dataset-aware form needed (no cache fill). The hash lane's recommendation: the ratio at 2^20 with the threshold set from the clean seeds' per-site spread (p23's site 0.84; every clean site 0.995 to 1.000), plus the structural rule for the idiom so the ratio is a never-firing check on it. The attack-pass lane's verdict: sub-version 3 is the stream to gate and cannot read green by 19:00Z; byte 5 for 0.3.21 stands on its evidence. 0.3.21's STAGING (the node lane): the order dry-merges onto 55768f88 with nothing moving to 0.3.22; the late-join fix is 52e96c94 (70e4601e rebased onto 55768f88, exec suite 33 green with both new tests); f067f7c1, b0444f51 and 437f0438 merge clean in order; 2e32d5f6's one conflict (DST_ADDRESS beside pool-finish's DST_BINDING in consensus/core/src/finality.rs) kept both; the live-file digest eada4bda after each (every switch at never); the staging waits on the shipper's sweep-end word; the re-pin held. PC 2 DOWN AGAIN (main, 16:5x UK): the project lead takes PC 2 down for cable work (PC 1 back but his desk); both PCs out of the sweep's waves, each updates on its poller on return; no PC job to PC 1; the Windows G1 completed before the outage, nothing reruns. 0.3.21's SECOND GATE LINE on 55768f88 (sha256 279b1b690e854fc9): the ten-minute mixed-version gate beside the 5899f603 pair, 13:37:40Z to 13:47:52Z, SUMMARY PASS (one digest b0afb2ee on five nodes; 223 new and 381 old blocks accepted by the old hub, 0 rejected; counts equal at 319, 486 and 604 through both clean joins and the restart step at 13:45:22Z; no panic); the node lane's two lines on 0.3.21's first candidate complete, in plan 6.9 on ca3-v4-node; the fleet's set on it (the bare-child 12 GB line, the wipe, the kept read, the cases) is the fleet's. 0.3.21's FIRST GATE LINE on 55768f88 (sha256 279b1b690e854fc9, the string read back; pairing igneum-pow 8c728ca3 at byte 5): the digest gate 13:35:41Z to 13:37:19Z SUMMARY PASS (a89be8a7 on both binaries with the peers; db9a85f9 refused, no peer; the live file's eada4bda unmoved); the ten-minute mixed-version gate from 13:37:40Z, line about 13:50Z. The 0.3.21 order as the shipper sent it: 55768f88; f067f7c1 and 70e4601e; b0444f51; 6eb21fc9; db28d331; then the re-pin from 8bdcbdd8 on the coordinator's word; suites between, the digest read after every one; the mirror's release-0.3.20-node back at the pin c4459193, release-0.3.21-node open at 55768f88. THE LATE-JOIN COMMIT (N9's second half, the node lane): 70e4601e on the box mirror as branch proof-hold-fix, from c4459193, two files (igneum/exec/src/proving.rs, protocol/flows/src/v10/proving.rs); the gap was the fetch side on the joiner (the served record ran the native check against the joiner's trailing exec state before anything was stored, the check refused it, the proof was never held, the body rule read "not held" for 20 s and failed the IBD); the fix holds the proof by hash before the checks (the pool entry still needs them) and the serve side says when it holds fewer than asked; the exec suite 32 passed at 13:26Z with the known-failed shape first, the flows check green 13:28Z, igneumd on build-1 at the 0321 worktree path built 13:32Z, sha256 17649eeb2f7d1290, string read back; with the testnet lane (the resume form, B alone); it joins the 0.3.21 staging as its own commit. THE WIPE CANARY ON c19-1, c4459193 (sha 45be9b02d1b002f5, string read back): FORM END rc 0 at 13:50:53Z. Wipe synced 13:35:50Z (57 minutes, inside the 98-minute class); mining 13:36:00Z to 13:47:07Z, 66 mined, 66 accepted, 0 rejected, isSynced true at the tip throughout; the hub holds 41 of its blocks in its last 700 with 0 rejects (13:47:09Z); the restart on its kept datadir at 13:47:15Z: the old process stopped at once (the new process's first lock line seven seconds after the marker; the watchdog held nothing, the b7cc37e7 fault closed), synced again at 13:48:39Z after 84 s, 109 templates read with max 3,432 ms and 0 timeouts; the kept read on pool-1's 0.3.17 copy on the same pod passed at 13:38Z (the rewrite line once, a clean second start). The pin's set on c4459193: the digest gate PASS, the mixed-version gate PASS, the wipe canary PASS, the kept read PASS, the restart PASS, the 12 GB line proves and verifies (paid is a race, not a gate); CASES END from c20-1 (about 14:50Z) is the last pin line. THE INTEROP FACT stands from the void run: the 5899f603 hub accepted 235 object-byte-5 blocks from the 8097d600 node with 0 rejected, one digest on all five nodes on the live sixteen-field file. The gates: the digest test and the kaspa-pow vector test (the amended devnet epoch-0 id 1a4230699a6b9c60 must equal, c120d7963abdcd96 must differ, the v3 control unchanged) on the box; the mixed-version Devnet 2 gate (the amended 0.3.20 node beside a 5899f603 node for ten minutes on the live file without the v4 fields) after the Mac build; the fresh-join canary the 0.3.20 cut's | +Every failing seed is ONE low-entropy load site; the mechanism is lineage-blind (AP-F8-1's residual) and the acceptance could not see it because it never ran the shadow block (AP-F8-3). SUB-VERSION 3's FIRST COMMIT: ca3-v4-amend ddacfbd3, 14:20:37Z (origin and build, gate GREEN): the acceptance executes the shadow block as the hash does, the test pins it to verify.rs on the seven v4 programs; PROGRAM_SUBVERSION_V4 = 3; byte 7; (A) and (B) held in a stash. Epoch-0 id a785001687d8688a (must-differ c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3; the devnet seed still accepts at attempt 1, so its program is sub-version 2's under the new id); the seven fingerprints unchanged from sub-version 2 for the same reason (e370fb2080b7dbb1, b7237555d31fc3cf, b6b167fa15dfe2c9, 28bdf65eff33f2c4, e26d38c46f3f1b16, dd8fdf6ff4f59eed, 8bf40f5cb858d835; control 90f794dd556f7a3b; Metal = Apple OpenCL 14:18:41 to 14:19:13Z), so the fleet and PC 2 G1s already read them and the G1 on sub-version 3's packs is a re-run of a known result; packs zip packs-ca3-v4-sub3 sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154; the ledger entry carries AP-F8-2's exhaustion half FIXED-AND-PASSED at 8bdcbdd8 and AP-F8-3 fixed here; the suite and the 4,096-seed census at ddacfbd3 on box 2. THE LOCALISATION (the hash lane): p23's band is dataset- and nonce-independent and reproduces in the acceptance's own execution: site 7 (instruction 38) reads r6 after 25 mulhi, 31 or r6 |= r4, 35 xor r6 ^= r4, which is r6 and not r4, an AND mask the lineage rule counts as fresh because the xor's operand is the or's; over 2^20 evaluations on the closed-form words site 7 reads 874,953 distinct word indices against about 1,046,500 at every other site (0.84 of uniform, 2.2 s on one box-2 core); over 2^24, 8,979,203 against about 16,260,000 (0.55, 35 s). THE COST LINES FOR THE SECOND COMMIT (0.3.22): structural (an abstract value class tracking shared operands) 0 s per attempt, this idiom only; the distinct-index ratio at 2^20 2.2 s per chosen candidate; at 2^24 35 s; no dataset-aware form needed (no cache fill). The hash lane's recommendation: the ratio at 2^20 with the threshold set from the clean seeds' per-site spread (p23's site 0.84; every clean site 0.995 to 1.000), plus the structural rule for the idiom so the ratio is a never-firing check on it. The attack-pass lane's verdict: sub-version 3 is the stream to gate and cannot read green by 19:00Z; byte 5 for 0.3.21 stands on its evidence. THE THRESHOLD NUMBERS FOR SUB-VERSION 3's SECOND COMMIT (the hash lane, box 2, the per-site distinct-index ratio over 2^20 evaluations against the window expectation N minus N^2 / 2W, on the 64 F8 programs as ddacfbd3 draws them, 2.8 s per seed on one core, all sixteen sites): the 55 clean seeds' per-seed minimum 0.9962 to 1.0000 (median 0.9999); over all 880 clean site rows min 0.9960, p1 0.9990, p5 1.0000, median 1.0000. The nine failing seeds' minimum site: p23 0.8361 (site 7), p18 0.9274 (site 6), p19 0.9335 (site 15), p15 0.9432 (site 2), p56 0.9654 (site 2); then p34 0.9927, p4 0.9961, p8 0.9963, p10 0.9963. A threshold of 0.98 sits 0.016 under the clean minimum and 0.015 over the strong five's maximum and rejects exactly those five; the weak four (1.22x to 1.50x in F8's gate) sit inside the clean spread at 2^20 and no threshold reaches them without rejecting clean seeds; a 2^24 run (35 s per candidate) on the weak four, p23 and five clean seeds measures whether they separate there (p23 went 0.84 to 0.55). The structural rule is in and bites where the band was: with the shared-operand relation tracked in the draw and in (a'), p23's attempt 1 draws site 7 from r5 instead of r6 (the or-then-xor on r4 marked r6 lossy); the devnet seed still accepts at attempt 1 (id unchanged); the (a') fixpoint carries the relation. THE COORDINATOR'S LINE: decide by the 2^24 lines: if they separate the weak four from the clean seeds with a gap at least the 2^20 gap, commit (iii), the 2^20 ratio at 0.98 always plus the 2^24 ratio only when the 2^20 per-seed minimum sits under a band edge set from the clean p1 with margin (0.999 fires it on about 1 percent of clean candidates, 35 s once an hour on a node); otherwise commit (i), the 2^20 ratio at 0.98, and name the weak four (p4, p8, p10, p34) as the open tail in the ledger and the commit, unattributed-and-chased, not absorbed. SUB-VERSION 3's SECOND COMMIT: ca3-v4-amend 017e7037 (017e70376489251e18564c0abce7e466e606c8b3; origin and build; gate GREEN; CI run 37639406567 queued), choice (i) by the 2^24 lines: 2^24 does not separate the weak four from the clean seeds (weak p34 0.9181, p4 0.9614, p8 0.9630, p10 0.9612; clean p44 0.9612, p52 0.9613, p3 0.9971, p2 1.0004, p5 1.0004; p23's chain attempt 1 1.0004), two clean seeds sitting on the weak four's value, so any 2^24 floor that reaches them rejects clean seeds. Committed: the per-site distinct-index ratio at 0.98 over 2^20 alone (ACCEPT_UNITS_DISTINCT_V4 = 4096, MIN_DISTINCT_RATIO_V4 = 0.98; expectation per site N minus N^2/2W, window 2^28 >> min(win, 2), the shadow executed), no 2^24 stage, (B) unwired; the structural shared-operand rule in the draw and in (a'); the open tail named in the ledger and the commit: p4, p8, p10, p34 (0.9927 to 0.9963 at 2^20), unattributed and chased. + +| Threshold line | Value | +|---|---| +| Floor at 2^20 | 0.98 | +| Clean minimum over the 55 clean seeds' 880 site rows | 0.9960 (p1 0.9990, median 1.0000) | +| Strong five | p23 0.8361, p18 0.9274, p19 0.9335, p15 0.9432, p56 0.9654 | +| Margin | 0.015 to each side | +| Cost per chosen candidate | one 2^20 pass, 2.1 to 2.2 s on one box-2 core, once an hour on a node | + +Known-failed test class_v4_distinct_ratio_rejects_the_low_entropy_band green on box 2 (12.95 s): p15 attempt 3 (52638ea2e8b0fd68) site 2 at 0.943; p18 attempt 2 (9a37e9489d8ba698) site 6 at 0.927; p19 attempt 0 (79d7441de0689223) site 15 at 0.933; p56 attempt 2 (486a8ad2701ec3b5) site 2 at 0.965; p23 attempt 1 (d65122675f16a1c7) draws site 7 from r5 and passes, and with r6 put back is refused by (a') UnfreshLoadSource and, run anyway, by the ratio at 0.836. Stream unchanged from ddacfbd3 (re-export diff 0 on all eight packs): id a785001687d8688a, the seven fingerprints and the packs zip sha256 4f2445c5... as recorded. THE SUITE AT 017e7037 on box 2: 103 of 103 (64 lib + 7 derive + 4 mixer + 19 packs + 2 recheck + 7 scratch, 3 diag ignored), rc 0; the lib tests 140.8 s against the 41 s whole-suite line at ddacfbd3, because every class v4 draw in the tests pays the 2^20 ratio pass on its chosen candidate (2.2 s each): a CI-time cost, not a node cost (one pass per epoch draw). CI run 37639406567 on 017e7037 success. THE CENSUS AT 017e7037 (box 2, 4,096 chain-shaped seeds plus F8's p1 to p3, draws in parallel across the cores; tools/ca3-v4-uniform now draws across available_parallelism since the serial run became a four-hour job): 4,099 programs, 0 lossy-sourced load sites of 65,584 (57,322 injecting, 8,262 bijective), 0 exhaustions; attempt histogram 0:1297 1:899 2:609 3:416 4:298 5:197 6:125 7:92 8:54 9:46 10:21 11:14 12:13 13:9 14:6 16:2 17:1, mean 2.086, max 17 (ddacfbd3 read 1328/917/622/409/284..., mean 1.998, max 17): the ratio refuses about 4 percent of candidates that pass every other test, one extra attempt on about one seed in twelve, the worst case unchanged at 17; devnet epoch-0 at attempt 1, id a785001687d8688a; F8's p2 attempt 5, p3 attempt 1. The attack-pass lane's class check: ddacfbd3's shadow-executed verdicts against 8bdcbdd8 on 598,678 chain-shaped seeds move 11,990 (2.0 percent) to a different attempt, 0 exhausted, max 32; on 017e7037 the pairing holds and the 64-seed gate at 2^24 plus the 10^6 exhaustion count run to about 16:05Z. The hash lane's ledger lines 2a111fb1 on origin and build (the GitHub 500s cleared on their own), CI run 37642582140 success at 15:25Z; the hash lane has nothing in flight. Nothing on the hash side stops a cut of sub-version 3 at 017e7037 for 0.3.22; then the attack-pass lane's 64-seed gate at 2^24 and 10^6 exhaustion count. Owed as before: G2, G3, the ladder re-measure, AMD (PC 1), the 2019-class core, the fleet and PC 2 G1 on the sub-version 3 packs (a re-run of a known result). release-0.3.21-node STAGED (the node lane, 16:0xZ): 96161037 on the mirror, at the shipper's sweep-end word, in the final order on 55768f88 (c631c64b, 52e96c94, f067f7c1, b0444f51, 437f0438, 2e32d5f6, f95178a1 cherry-picked, a6864e36 and d8bceca5), pairing igneum-pow 8c728ca3 at byte 5, no re-pin. The whole set on the tip green: consensus-core 126, the consensus crate whole (lib 120, both integration targets), igneum-miner 25, kaspa-pow 17, igneum-exec 36, the three checks, 15:49 to 15:57Z on build-2. Binary built on build-1 at 15:58Z, igneumd sha256 f99340b3cf4ce32e, the string read back; the digest eada4bda on the previous live object and 4bbbe816 on the published floor file (so the 0.3.20 floor file is published), as the pin reads them. The node lane's digest and mixed-version gates on it from 16:00Z; the fleet's set from the same minute; plan 6.9 carries the steps and the two box-input rules the staging added. THE 0.3.20 RECORD (the shipper, UTC). Cases: the dc141409 run on c18-1 CASES END rc 0 at 12:37:18Z (both halves PASS); the c4459193 run on c20-1 CASES END rc 0 at 14:54:02Z with its relay half void (one RunPod host, no hairpin) and the poison half PASS (13 rejected, 0 accepted); main's (b): the publish on the dc141409 cases plus the diff argument (the class byte the only touch in the cases' territory) and c19-1's tip-following, with the separate-host relay re-run on c19-1 on the live digest as the halt condition and the Discord card's gate (CASES END about 16:25Z). PUBLISH 14:54:17Z (15:54 BST): manifest 0.3.20, mac DMG sha256 73796c5f..., Windows installer 45b2f3fb..., the hive tar d9dd12df... on the public alias. THE FLOOR FILE: program_class_v4_activation_daa 900,000 (the live DAA 294,073 at 14:51Z; 294,073 + 604,800 = 898,873 rounded up to the 3,600 boundary), window 86,400 unchanged, file sha256 294f1f80...; the digest 4bbbe8162ea9fff277aa5b16b4ffad9e2262ba5e6a5acac7b697ff77211e7328 read on c4459193's binary before the cut and on the hub's handshake line after. The pin c4459193, igneum-pow 8c728ca3, byte 5; the sweep's node pair a80ed39c / 70a5180f (the build-server lane's native build of the same tree). THE SWEEP complete 15:39Z (16:39 BST): wave 1 the hands (observer-node, node1 at 14:57Z), the Mac (15:23Z on its poller, interface 1.0.1), the hub, pool-1 and the eight heaviest voters (15:04 to 15:21Z); wave 2 the four lighter voters (15:23 to 15:26Z); wave 3 Devnet 2's four pods and bps-seed (digest 4a0b8726 unmoved); the first new-side lock 9313 at 15:28:08Z after a 23-minute split; every lock line "sweep complete before 13 October 09:00 UK (the margin; the floor is now DAA 900,000)". 0.3.17 nodes remaining: PC 1 and PC 2 (offline for the project lead's cable work; their apps update on their pollers on return) and the three testnet seeds (on the testnet, not on the devnet's floor); no devnet node of the fleet, the hands or the Mac on 0.3.17. EARLIEST FLIP: the floor at DAA 900,000 is about 7.0 days of DAA from the publish (605,927 DAA at about one a second), so about 14 October 23:00Z (15 October 00:00 BST) at the earliest, and only once the seven 86,400-DAA windows read 95 percent of blue weight signalling byte 5; the live floor of 831,600 (13 Oct 08:00Z) is replaced by the published file on every swept node, so the chain never flips to the 6 October stream. Per tier: a solo miner on the Mac or a swept box mines on; a PC miner on 0.3.17 is refused by digest when it next connects until its app updates (its poller does this on return; nothing by hand); the pool and the hub are on the pin; the auditor reads one object, one digest, one floor. + +SUB-VERSION 3 PASSES BOTH GATES (the attack-pass lane, the close line dated 7 October 2026): class v4 sub-version 3, commit 017e70376489251e18564c0abce7e466e606c8b3 on ca3-v4-amend, pairing id a785001687d8688a (verified by the harness). F8's 64-seed census (p2 to p65) at 2^24 nonces each, chain path, window-model control, box 2, 14:51Z to 16:00:20Z: PASS, 60 of 64 under 1.2x (0.9915x to 1.144x); the only four over are the named tail, unattributed and chased: p10 1.5036x (identical to sub-versions 1 and 2, hottest item 0x4004da at 362 reads, no predicted source), p8 1.3776x (0x837de4, 420 reads), p34 1.2505x (0x800010, 541 reads, the one-bit value through sub at 5), p4 1.2167x (0x4000e7, 355 reads); every strong seed gone (p23 4.82x, p19 3.32x, p15 2.57x, p18 2.50x, p56 2.01x all under 1.2x); the worst ratio on the stream 1.50x; the tail's hottest items carry 355 to 541 reads of 2^31 (one to two per 2^22 items above the mean), no chip consequence. The exhaustion gate as it is: the chain-path count on 017e7037 runs slowly (the draw evaluates (c'') at 2^20 per candidate: 20,532 seeds in 59 minutes, 0 exhausted, 0 panics, max attempt 29), so a 10^6 count is two days away and is not waited on; the substance is met by construction (the 256 cap and the last resort unchanged from 8bdcbdd8, 0 of 10^6 there) and by measurement at 017e7037 on 24,631 seeds (0 exhausted, max 29; r about 0.68); the count runs on as a strengthening line. The node's epoch draw now costs about 2 attempts at 2.2 s each, 4 to 5 s per epoch on slower cores, once an hour. The hash lane's ledger at 6941da1d. SUB-VERSION 3 AT 017e7037 IS THE FROZEN GENERATOR FOR 0.3.22 (byte 7), THE TAIL RULED (main, 18:1x UK): the four seeds (p10 1.5036x with its hottest item at 362 reads, p8 1.3776x at 420, p34 1.2505x at 541, p4 1.2167x at 355, of 2^31 reads) are accepted as the window model's unattributed residue at 1.22x to 1.50x with nil chip consequence; the AP-F8-1 row CLOSES with that wording and the hottest-item counts beside it; the 10^6 count on 017e7037 runs on as the strengthening line. The attack-pass plan's start 15 October or the morning after. 0.3.21's FIRST CANDIDATE 96161037 (sha256 f99340b3cf4ce32e, string read back) passed the node lane's two gates on its own binary: the digest gate 15:59:54Z to 16:01:32Z PASS (a89be8a7 with the peers right; db9a85f9 refused, no peer); the mixed-version gate 16:01:53Z to 16:12:05Z PASS (one digest b0afb2ee on five; 252 new and 352 old accepted, 0 rejected; counts equal at 316, 493 and 604 through both clean joins and the restart step; no panic); the node side complete; the fleet's set on the same binary (the kept start with the ids gate, the wipe canary, the cases rerun, the 12 GB line, N15's restarts of p1-5090 and p2-3090-3) is what the shipper's pin word waits on; byte 5 throughout, nothing on the class v4 seam moved. DEVNET 3 NOW (the project lead through main, 17:3x BST): 0.3.22 is the Devnet 3 release (a fresh network object igneum-devnet-3 with every activation at 0 and no override file, the era VDF fork, class v4 sub-version 3 at byte 7 from genesis), the node building on build-1, genesis by 17:30Z (18:30 BST). THE HANDOFF (17:3x BST, inside the 17:40 BST line, to the shipper and the node lane): igneum-pow 017e70376489251e18564c0abce7e466e606c8b3 (the audit-freeze-2026-10-07 tag; 2a111fb1 and 6941da1d above it docs only), object byte 7, PROGRAM_SUBVERSION_V4 = 3, devnet epoch-0 program id a785001687d8688a (must-differ c120d7963abdcd96, 1a4230699a6b9c60, a788661687db4bb3), kit packs-ca3-v4-sub3 zip sha256 4f2445c50c58d76a5544023492d8b858d0b07c5e372d31f9c90c4ce51f829154, the eight fingerprints as recorded (equal on Metal, Apple OpenCL, the fleet 5090 and PC 2's 5090), both attack-pass gates GREEN, suite 103 of 103, CI success; the open items stated as open: the four-seed tail under main's ruling (the attribution for 0.3.23), the 10^6 count as a strengthening line, the 4 to 5 s epoch draw, the owed measurements that do not gate Devnet 3. NO FURTHER HASH CHANGE RIDES ON 0.3.22; anything from the tail goes to 0.3.23. The node lane stages the re-pin on the 0.3.21 tip as its own commit (the fork commit and the kaspa-pow suite line owed to this record); the hash lane's sub-version 3 pairing follows it. THE PUBLIC CHIP TEXT REWRITTEN LAUNCH-FIRST (the project lead: "I thought we were making it 2.1 from launch?"; master 9b996d06, docs/plans/counter-asic-3-public-text-2026-10-07.md): the testnet and mainnet objects set program_class_v4_activation_daa 0, so class v4 is live from genesis and the launch number is 2.1x to 3.9x on day one; the three texts and evidence row 17 lead with that (labels kept), then class v5, then the 5x to 9x only as the class v3 baseline the work started from, the devnet's activation height a devnet fact only; no em dashes, no prize mention, eight columns; with the site lane to apply in the same deploy as the padding sweep (its commit and deploy time owed to this record). STOP-THE-LINE ON MASTER's POW SUITE (main through the CI steward, 18:4x BST): red since 16:31 BST (runs a4eaf76 and 1210158d; program_ids_differ_between_class_v3_and_class_v4_of_one_seed and cpu_recheck_equals_the_worker_reference_for_class_v3_and_class_v4 fail on packs-ca3-v4/v4-devnet-epoch0) because era-vdf's merge 0e2d6b1c put the sub-version 1 line's generator on master against tests/recheck.rs's pins, never CI-run. Ruling: the hash lane merges ca3-v4-amend's tip 6941da1d to master through merge-to-master.sh within 15 minutes, provided its epoch-0 id equals the frozen object's; the coordinator verified the condition (6941da1d's igneum-pow byte-identical to 017e7037; recheck pins 0xa785_0016_87d8_688a with the three must-differ ids; PROGRAM_SUBVERSION_V4 = 3), so no revert; master is the 0.3.23 line after this, 0.3.22 keeps its pin at 017e7037. EXECUTED: ca3-v4-amend on master as merge cf7d6ccb (pushed 16:45:48Z through merge-to-master.sh, try 1; the branch gate GREEN, 55 checks in 317 s on 874e945d; master ac8ed2f1 merged into the branch first with docs/fud-ledger.md keeping both sides and igneum-pow taken wholesale from 6941da1d, byte-identical to 017e7037); master's CI run 37654633279 on cf7d6ccb in progress from 16:46:10Z, the pow job's conclusion owed. Master's igneum-pow is now the frozen sub-version 3 generator. THE 0.3.22 RE-PIN STAGED (the node lane, 16:38Z): fork commit bd710a36 on release-0.3.22-node (igneum-pow 017e7037 archived beside the fork as igneum-pow-amend, byte 7, epoch-0 id a785001687d8688a must-equal, the three must-differ ids, PROGRAM_SUBVERSION_V4 read as 3); the line's candidate fa7f854f (the re-pin, the era VDF merge f2ecf452, the igneum-devnet-3 object with program_class_v4_activation_daa 0 and a one-day signal window, so byte 7 is stamped and hashed from genesis); the kaspa-pow suite on build-2 from 16:38Z, its line owed; the hash lane has the commit for its pairing run. THE kaspa-pow SUITE ON THE 0.3.22 CANDIDATE 21d8f454 (build-2, 16:47:10Z): GREEN 17 of 17; the pairing test reads PROGRAM_SUBVERSION_V4 = 3, epoch-0 id a785001687d8688a, the three must-differ ids hold, the chain draw at attempt 1 against class v3's 0 on the test header; the candidate's digest for igneum-devnet-3 ab9af79f...ed23; the node stamps object 7 (block version 1794) from genesis. MASTER GREEN ON THE POW FIX: CI run 37654633279 on cf7d6ccb success at 16:54:51Z, the igneum-pow job success; master's igneum-pow the frozen 017e7037 byte for byte; build-1's amend checkout synced to 874e945d (its packs-ca3-v4 carries the sub-version 3 kit). THE CHIP TEXTS LIVE (the site lane, site-ui-5): sections 1 to 4 applied verbatim in b34d1932, master cc593483, live on igneum.network at 16:47Z (home row 03 "under class v4 from the first block"; /litepaper#chip-model the new paragraph and the reordered table with the class v3 row last; /miner the new line; /evidence row 17 "2.1x (k = 1) to 3.9x" in eight columns); the litepaper's abstract rewritten launch-first too; tools/ci/ledger-text-check.mjs X35 asserts the launch-first sentence on the home page and "so the launch number is the class v4 row" on the litepaper; no prize mention. /claims (the litepaper's limits section) rewritten launch-first by the coordinator in the litepaper's chip bullet (2.1x to 3.9x under class v4 from the first block with its labels, class v5, then the class v3 baseline "never the launch state", the recompute chip under 1x, the X9 history), /claims rebuilt from it, the ledger text check 61 of 61, the padding and overlap sweeps green in the 56-check gate, master 0a999646 at 17:01:47Z. DEVNET 3's FIRST GO (the fleet lane): dn3-g1 on 21d8f454 up 16:50:21Z from an empty datadir, digest ab9af79f matching the build-1 read, genesis a6fa348e executed (chain id 4463), object 7 / block version 1794, era VDF from DAA 0, no override file, mining from 16:50:42Z; the dn3_ observer running since 16:38:29Z; DN3_GO_DATE=2026-10-07 in /srv/hands/dn3/dn3.env, the hash-origin timer's first dn3_ report 8 October 08:30Z. BUT NO BLOCK ACCEPTED: dn3-g1 refuses every block its miner finds with "the block timestamp is too far into the future: block timestamp is 1791417600001 but maximum timestamp allowed is 1791392281213" (16:57:51Z): 1791417600001 ms = 2026-10-08T00:00:00.001Z, the template stamping genesis + 1 ms, so the igneum-devnet-3 genesis object carries 8 October 00:00Z, one day after the intended 7 October 00:00Z; every block is seven hours in the future and refused before PoW on any node with any miner or pack; the pack is not the suspect (the node draws the epoch's program under its own igneum-pow and hands the pack to the worker; the exported kit is for G1 and recheck only). The fix is the node lane's (a past genesis timestamp, moving the genesis hash and the digest) and a rebuild; the fleet reruns the go within the minute of the new pair; if the corrected build lands by about 17:20Z the pair lock is about 17:35Z (18:35 BST). Spend at 17:00Z about USD 410 of 1,000. GITHUB SUSPENDED (17:0xZ): every push to origin refused with "Your account is suspended" (403); the API reads 404 for the user igneum-labs and the repo (the shape of a suspended account, not a revoked token); with the project lead (the ticket route given by main); until GitHub answers, every lane pushes to the build-1 mirror (/srv/igneum.git over ssh) and the mirror is the record, merges landing through the box gate stamp under the shipper's exception window. This branch is on the mirror at a33a7859 (17:09Z); master's last origin landing 0a999646 (17:01:47Z). DEVNET 3 MINES (the fleet lane, 17:08Z): dn3-g1 on the corrected candidate 69d1b56e (genesis 7 October 00:00Z, hash 4020cb43..., digest 83eb50cdf2eda4cb...) accepted its first block at 17:06:19.920Z, 3 blocks by 17:06:44Z, 0 rejected; dn3-g2 joining, the pair's first common lock about 17:15Z (18:15 BST), then the late joiner and the canary's ten minutes; the hands pair for 69d1b56e landed 17:05:54Z, the shipper ruling whether the genesis bytes are the node lane's or the hands'. Per tier: the first chain that hashes class v4 sub-version 3 (byte 7) from genesis is live on the fleet; the launch-first chip texts describe it exactly. DEVNET 3's EPOCH-0 PROGRAM ID (the node lane): fce15bf61030be57 on igneum-devnet-3 (genesis 4020cb43...b925), read in the 0.3.22 miner's "cache ready" line on build-1 at 17:10:39Z and on dn3-g1 at 17:12Z, the node accepting 85 of 85 GPU blocks; a785001687d8688a stays the shared devnet's epoch-0 id (genesis edc4fa84) and the kaspa-pow pairing pin; the pairing is unchanged, the id follows the seed; the fleet's pack-id gate reads fce15bf61030be57 at epoch 0 and the node's per-epoch value after; the exported kit's eight packs are the shared devnet's seeds, so a Devnet 3 kit, if the hive wants one, is a re-export over 4020cb43's seeds (the hash lane's, on request). DEVNET 3's PAIR AGREES (the fleet lane, 17:19Z): dn3-g2 up 17:17:58Z on the same bytes, digest and genesis, synced from dn3-g1 and mining from 17:18:15Z; the pair agrees on every determined finality checkpoint (20, 21, 22 on identical blocks in both logs); 702 blocks, 0 rejected on either, by 17:19:08Z. The first LOCK lands about 19:10Z (20:10 BST): the object's finality window is 7,200 DAA ("window filling, 681 of 7200") at about 1 block/s, the object as cut, nothing wrong. Two independent nodes agree on the chain since 17:18Z; finality signatures start two hours in; the hash-origin daily (dn3_ tables, DN3_GO_DATE 2026-10-07) counts from today once the observer units are enabled on the shipper's go. The shipper rules whether the genesis is declared on the pair's agreement or on the first lock; the late joiner, the empty-datadir canary (ten minutes) and the spare placing on the hands pair; the standing boxes' second nodes after the joiners on the shipper's word. Spend 17:20Z about USD 412 of 1,000. GITHUB RULE (main through the shipper, 18:02 BST): no push, fetch or poll of GitHub from this lane or its sub-lanes, not even a retry; the box mirror on build-1 and build-2 is origin and the box gate stamp the verdict until it lifts. DEVNET 3's EPOCH-0 PACK EXPORTED (the hash lane): program.json 0xfce15bf61030be57, attempt 0, sub_version 3 (dn3-g1 drew the export path's seed); igneum-pow at 874e945d (byte-identical to 017e7037 and master's), --epoch-hex and --era-hex the genesis 4020cb43...b925, class mx8-eraaf3a9139+sh256x27, day bytes "igneum-day/" || le64(20733) (the chain's rule day = timestamp_ms / 86,400,000; the program and id day-independent, the dataset and fingerprint rolling with the UTC day); Metal fingerprint e510ad92b4d24846 at 2^24 from base 0, Apple OpenCL equal, vectors 3 of 3; on build-1 /srv/artefacts/packs/v4-devnet3-epoch0/ and .zip sha256 e025750f71175ed14d6e2a24e387ebbf1979b1cd0faee9139c41a7671165b334, the sub3 kit zip beside it (4f2445c5...); in the 0.3.22 hive package order with the kit. [user]'S THREE ORDERS (through main, 18:3x BST), with his correction (18:4x BST: everything in-house, nothing external): (1) BUILD CLASS V5 NOW on the 0.3.23 line (program class v5, its own activation height, object byte 6): the generator and verifier in igneum-pow (+0.2 ms per warp against the 10 ms gate), the node side (the state commitment into the dataset derivation, the stateless/stale-chip rule known-failed first on a stale dataset), the hot-set, weak-day and shadow-redundancy rules routed to this class, the attack-pass families re-run on v5, the kit for Metal, CUDA, OpenCL/AMD and Intel with fingerprints equal, the crossing on Devnet 3 by height after its gate, miner cost rows per card; the v5 lane resumed with the order, owing tonight the design-to-code gap in one list and a UTC clock for the first v5 pack. (2) CRYPTANALYSIS IN-HOUSE: no outside firms, no paid lots, no briefs to anyone; the three targets (the mixer M_r, the chained cache, the acceptance rule) attacked by three adversarial lanes that have never worked on the hash code, each given only an outsider's inputs (the public kit, the frozen object, the spec, the attack-pass harnesses), a written attack plan first, a budget of box hours, a report in the attack-pass shape (the claimed break or the bound reached, reproducible); the Counter ASIC lane the defender, main ruling disputes; plans within two hours, first results by tomorrow evening; a coordinator lane spawned for it (docs/plans/cryptanalysis/in-house-pass.md, funding.md's lots rewritten to the internal pass). The served sentence "the cryptanalysis plan buys three external lots" rewritten on the litepaper, /claims and evidence row 17 to the internal adversarial pass, labelled internal, the one outside check staged on its escrow and the publish word (the served text never names the prize or the project lead, by the forbidden-strings gate). (3) OWED MEASUREMENTS on PC 1: released tonight after the shipper's 0.3.21 host build (the line "PC 1 released" about 18:05Z, the window to 17:30Z on 8 October, an elevated job allowed under the standing rules); the hash lane prepares the three job files on the sub-version 3 kit (the 9070 XT G1 and ladder rows, item 6's step costs on AMD, the 5090 clock rows elevated, dr736 if it fits), published one at a time on the coordinator's relay of the line, --cards-off on the measured card alone, the desk left usable; the rows land in the public table with their labels. Nothing in (1) or (3) reaches outside the fleet, the boxes and the PCs. DEVNET 3's PROOF WINDOW OPENED 17:57:05Z (the fleet lane): coverage from 17:44:23Z (dn3-x1, an RTX 3060 12 GB, the sm_86 SP1 floor, from DAA 0; the first segment 1024..1031 submitted 17:45:49Z, 86.1 s end to end); the first records PAID by dn3-x1's key, segments 1256..1263 (0.7036 IGN) and 1272..1279 (1.5993 IGN) in block 1403, paidShards 10 at 17:57Z; the 24 hours run to 17:57Z on 8 October; sizing: a 3060 proves a segment in 84 to 86 s (about 42 an hour) against 450 segments an hour at 1 block/s, 11 cards for a share of one, 15 placed (14 more 3060 12 GB pods on distinct Vast machines, USD 1.07/h together); a runbook rule found: a Devnet 3 block builder carries a proof record only after its own node verified it, so every Devnet 3 miner node needs IGNEUM_PROOF_VERIFIER on the host verifier (the four miners ran bare for 11 minutes, 72 records pending and 0 carried; dn3-j1 restarted with it at 17:54:37Z and carried the first). THE UTILISATION TABLE (the fleet lane, 18:00Z, for the project lead): 36 rented boxes plus the Hetzner seed, 37 GPUs, USD 197 a day at this size, today's total about USD 432 of 1,000; idle in the hour 12 by the letter, 9 of them Devnet 3 boxes rented in the last 15 minutes and syncing, 3 the 0.3.21 warm set standing between windows; the fleet's recommendation: stop Devnet 2's four boxes (USD 59.76 a day; Devnet 3 is now the staging chain) on the shipper's word, fold the 0.3.21 warm set (USD 12.72 a day) into Devnet 3's relay trio when 0.3.21's last line closes. THE PUBLIC BENCH TABLE (main's order): /miners now carries every measured card, 37 rows, with watts, MH per watt, the class v4 cost per card and the tuned state (the 5090 stock 136.1 MH/s at 350 W and tuned 127.71 at 226.8 W; the 4070 at its tune point; the 9070 XT, the M5 Max (no lever), the 5060 Ti, the Arc B580, and the fleet's rented-card sweep of 7 October: the 5080 71.16 at 143.4 W, the H100 248.70 at 385.6 W, the B200 416.35 at 855.6 W, the 4090 hands row 52.25 at 183.1 W, down to the 4060 Ti 20.10 at 77.5 W; every fleet row stock, bench only, labelled measured by the fleet or reported by the fleet). CLASS V5's DESIGN-TO-CODE GAP (the v5 lane, 19:00 UK; section 13 of docs/design/class-v5-stored-state.md at c17bc04b): igneum-pow's class v5 rebased onto the frozen sub-version 3 (v5 and its rungs draw under (a'), (c''), the shared-operand rule, the 256 cap and the last resort by merge); the fork rebased onto release-0.3.23-node with class v5 pinned to object byte 6 counted EXACTLY (byte 7 is v4 sub-version 3; the bytes are no longer ordered by class); the gap about 40 agent hours (17 the v5 lane's): the +0.2 ms per warp on the Mac (1 h), the AP-F4-1 and AP-F1-1 rules with their known-failed cases (3 h each), the attack-pass families on the v5 stream (4 h), the kits (Metal and CUDA hosts uploading leaves.bin, 2 h each; OpenCL/AMD and Intel 3 h), G1 on the 5090 and the Mac (2 h), the Devnet 3 crossing by height (3 h), the miner cost rows (3 h), the snapshot wire's day streams (3 h), the pool's per-epoch state fetch (2 h), the proof witness (4 h), the spec text (2 h); the first v5 pack's clock (Devnet 3's genesis as epoch and era seed, day 20,733) follows the suite and the day-stream bin. THE IN-HOUSE ADVERSARIAL PASS (the crypto lane, 19:05 UK): crypto-engage deb0011e on the mirror; docs/plans/cryptanalysis/in-house-pass.md (outsider inputs and withheld files, the three lanes, the budget 8 box-hours each and 24 total with a ceiling of 48 on the coordinator's word, the review roles, the clock, the label rule); funding.md's lots rewritten to the internal pass with no cash row and every firm name removed; the three lanes adv-mixer, adv-cache and adv-accept spawned 19:1x UK with outsider-only inputs, plans due 21:10 UK, first results by 18:00 UK on 8 October; the Devnet 3 epoch-0 pack added to their inputs. THE PC 1 QUEUE PREPARED (the hash lane, c1a1f1d7, nothing published): the kit fetch (zip sha256 1d441f5a..., the 8 sub-version 3 packs plus the ladder packs sh256x13/27/53/88 and sh64x52); the class v4 efficiency pass on the 5090 (elevated, --cards-off, a 17-step clock-lock grid from unlocked to 1,400 MHz with the four Ember caps on it, v4 then v3 at each step for about 60 s, the fingerprint on every step, nvidia-smi at 1 Hz, -rgc in finally; nvidia-smi has no voltage-offset lever, the lock walks the driver's V/F curve; about 40 minutes; the owed 5090 clock rows subsumed); the same on the 5080 (its unlocked row the stock point against the fleet's 71.16 MH/s); G1 on the 13 packs and the AMD ladder rows on the 9070 XT (the ladder packs' Mac fingerprints sh256x13 ff8f707210659eb1, sh256x27 892b6d55a7ddcfcb, sh256x53 663c73c61f62cc54, sh256x88 ec7ca430a061fa59, sh64x52 9dd010f79d8ca9f4); item 6's step costs on AMD (run e); the 5080 full Ember Tune (not elevated, the Power Helper carries the rights); the 9070 XT tune pass (the tune_line before and after on RESULT lines); dr736 not in the queue (its packs are not in this tree). The protocol: each exit line to the shipper, the next published on its ack, the shipper's "PC 1 released" line (after the 0.3.21 window host build) opens the queue. A SHARED-DEVNET FACT FROM THE FLEET (not this lane's, with the shipper and the infra lane): the Hetzner live seed 188.245.5.161:26611 is still on the old override object (digest eada4bda) 1 h 40 min after the 0.3.20 sweep (the fleet never touches Hetzner nodes, so it was outside the sweep); the 0.3.21 wipe canary c22-1 took five digest-mismatch rejects from it; an app with the packaged peers is refused at the seed and syncs through node1 and the hub only, a fresh joiner with only the seed cannot join, the 14 voters and the hub are unaffected; the owner puts the floor file ov16-floor-900000.json (sha 294f1f80) and the c4459193 pin on it. 0.3.21's STAGING (the node lane): the order dry-merges onto 55768f88 with nothing moving to 0.3.22; the late-join fix is 52e96c94 (70e4601e rebased onto 55768f88, exec suite 33 green with both new tests); f067f7c1, b0444f51 and 437f0438 merge clean in order; 2e32d5f6's one conflict (DST_ADDRESS beside pool-finish's DST_BINDING in consensus/core/src/finality.rs) kept both; the live-file digest eada4bda after each (every switch at never); the staging waits on the shipper's sweep-end word; the re-pin held. PC 2 DOWN AGAIN (main, 16:5x UK): the project lead takes PC 2 down for cable work (PC 1 back but his desk); both PCs out of the sweep's waves, each updates on its poller on return; no PC job to PC 1; the Windows G1 completed before the outage, nothing reruns. 0.3.21's SECOND GATE LINE on 55768f88 (sha256 279b1b690e854fc9): the ten-minute mixed-version gate beside the 5899f603 pair, 13:37:40Z to 13:47:52Z, SUMMARY PASS (one digest b0afb2ee on five nodes; 223 new and 381 old blocks accepted by the old hub, 0 rejected; counts equal at 319, 486 and 604 through both clean joins and the restart step at 13:45:22Z; no panic); the node lane's two lines on 0.3.21's first candidate complete, in plan 6.9 on ca3-v4-node; the fleet's set on it (the bare-child 12 GB line, the wipe, the kept read, the cases) is the fleet's. 0.3.21's FIRST GATE LINE on 55768f88 (sha256 279b1b690e854fc9, the string read back; pairing igneum-pow 8c728ca3 at byte 5): the digest gate 13:35:41Z to 13:37:19Z SUMMARY PASS (a89be8a7 on both binaries with the peers; db9a85f9 refused, no peer; the live file's eada4bda unmoved); the ten-minute mixed-version gate from 13:37:40Z, line about 13:50Z. The 0.3.21 order as the shipper sent it: 55768f88; f067f7c1 and 70e4601e; b0444f51; 6eb21fc9; db28d331; then the re-pin from 8bdcbdd8 on the coordinator's word; suites between, the digest read after every one; the mirror's release-0.3.20-node back at the pin c4459193, release-0.3.21-node open at 55768f88. THE LATE-JOIN COMMIT (N9's second half, the node lane): 70e4601e on the box mirror as branch proof-hold-fix, from c4459193, two files (igneum/exec/src/proving.rs, protocol/flows/src/v10/proving.rs); the gap was the fetch side on the joiner (the served record ran the native check against the joiner's trailing exec state before anything was stored, the check refused it, the proof was never held, the body rule read "not held" for 20 s and failed the IBD); the fix holds the proof by hash before the checks (the pool entry still needs them) and the serve side says when it holds fewer than asked; the exec suite 32 passed at 13:26Z with the known-failed shape first, the flows check green 13:28Z, igneumd on build-1 at the 0321 worktree path built 13:32Z, sha256 17649eeb2f7d1290, string read back; with the testnet lane (the resume form, B alone); it joins the 0.3.21 staging as its own commit. THE WIPE CANARY ON c19-1, c4459193 (sha 45be9b02d1b002f5, string read back): FORM END rc 0 at 13:50:53Z. Wipe synced 13:35:50Z (57 minutes, inside the 98-minute class); mining 13:36:00Z to 13:47:07Z, 66 mined, 66 accepted, 0 rejected, isSynced true at the tip throughout; the hub holds 41 of its blocks in its last 700 with 0 rejects (13:47:09Z); the restart on its kept datadir at 13:47:15Z: the old process stopped at once (the new process's first lock line seven seconds after the marker; the watchdog held nothing, the b7cc37e7 fault closed), synced again at 13:48:39Z after 84 s, 109 templates read with max 3,432 ms and 0 timeouts; the kept read on pool-1's 0.3.17 copy on the same pod passed at 13:38Z (the rewrite line once, a clean second start). The pin's set on c4459193: the digest gate PASS, the mixed-version gate PASS, the wipe canary PASS, the kept read PASS, the restart PASS, the 12 GB line proves and verifies (paid is a race, not a gate); CASES END from c20-1 (about 14:50Z) is the last pin line. THE INTEROP FACT stands from the void run: the 5899f603 hub accepted 235 object-byte-5 blocks from the 8097d600 node with 0 rejected, one digest on all five nodes on the live sixteen-field file. The gates: the digest test and the kaspa-pow vector test (the amended devnet epoch-0 id 1a4230699a6b9c60 must equal, c120d7963abdcd96 must differ, the v3 control unchanged) on the box; the mixed-version Devnet 2 gate (the amended 0.3.20 node beside a 5899f603 node for ten minutes on the live file without the v4 fields) after the Mac build; the fresh-join canary the 0.3.20 cut's | | Main's rulings (7 October, morning) | no generator change to v4 on the live devnet; the record's null is the window model with numbers, sent by the hash lane to the attack-pass lane so AP-F8-1 re-gates against it; a fault beyond the model (a low-entropy source at site 15) stops at the coordinator with the two options priced (a 0.3.19 class amendment before the flip, or the flip held at the floor), nothing shipping without the project lead's word; the tighter tail, an acceptance bound on the hot-set share, is a CLASS V5 item (sent to the v5 lane a6410f3b8abefb762 with the 64-seed census as its gate; the bound's number follows from the model) | ### AP-F4-1, the weak-day MUL draw (the attack-pass lane, 7 October, morning): PASS against v4, a class v5 rule diff --git a/docs/plans/era-layout.md b/docs/plans/era-layout.md index 661d9e026..c1ee708a5 100644 --- a/docs/plans/era-layout.md +++ b/docs/plans/era-layout.md @@ -171,7 +171,7 @@ Filled from a CPU census over programs (section 6). ## 8. What is unverified - Everything in section 6 marked pending. -- The 1-hour VDF does not exist; the devnet stand-in of section 2 is a proposal. +- The 1-hour VDF: BUILT on 7 October 2026 (era VDF lane, after the attack pass's F7 row named it the gating dependency): `kaspa_consensus_core::era_vdf` (the class-group Wesolowski scheme on a fixed-width integer and the hash-chain fallback behind the genesis byte `vdf_scheme`), `kaspa_consensus::processes::era_vdf` (the cut rule, the day-of-blues input, the evaluator thread, the record store), behind `Params::era_vdf_activation_daa` (never on every network until the project lead's word per network); the stand-in of section 2 stands below the activation and is what the VDF reads its input from above it. Verified: the F7 re-roll harness against the real era cut fires with the VDF off and is silent with it on across 6 cuts (`tools/era-vdf/reroll.mjs`, the record `docs/analysis/era-vdf-2026-10-07.md` section 3), the parameters and the measured prove and verify times are in spec 04 section 4.6. Still unverified: the P2P relay of a record to a syncing peer (spec 4.5, owed before era 1 of any network with the switch set), the binding of the cut to the certified checkpoint (left at the O-4.3 reading, one function to change), an external review of the class-group port (O-4.1), and the 2019-class-core verify time, which is measured on a proxy until a 2019 host is rented (record section 5). - The interleave's value against a chip with a programmable address decoder is nil (1.2); the claim is limited to hard-wired layouts. - The window floor of 2^26 words is set by the 5090's L2 (96 MiB) and the 9070 XT's Infinity Cache (64 MB, vendor figures); a future card with a larger cache moves the floor, which is a genesis constant. - No cryptanalysis of the stride (a multiply and a rotate before the mask); it is a bijection, so the address distribution is that of the register value, as today. diff --git a/docs/plans/ledger-decisions.md b/docs/plans/ledger-decisions.md index 7639ef799..e794af099 100644 --- a/docs/plans/ledger-decisions.md +++ b/docs/plans/ledger-decisions.md @@ -112,3 +112,10 @@ Standing rulings of the same hour: "We dont want to penalise holders" (dormant-c | 3 | The latency ladder | Approved | The six rungs (27, 35, 53, 88, 173, 267 passes), rungs 0 to 2 admissible, rung 3 re-measured on a quiet core before genesis, 4 and 5 inadmissible until verifiers allow; every step by 90 percent in each of seven windows, never unconditional; `latency_ladder_activation_daa` = 0 on the testnet at rung 0. | | 4 | Cryptanalysis | Approved, "make sure they find ZERO flaws, also cut costs if possible" | The engagement runs at the low point (about USD 80,000) unless a quote forces more; an internal attack pass precedes it so the firms find nothing new; every finding is fixed before the testnet go. The contracting entity and the prize are still the project lead's to confirm. | | 5 | Re-cut the testnet genesis | Approved | One cut with 18 decimals, `TESTNET_1`, and the switches on from genesis: proof verification, the leave item, the signing bonus, finality v3, the ladder at rung 0. Nothing live is touched; the go checklist decides the date. | + +## Era VDF (7 October 2026, 12:xx UK, era VDF lane): two decisions for the project lead + +Question 1, the activation. The era VDF (spec 04 section 4.4) is in the node behind `era_vdf_activation_daa`, never on every network, with the genesis scheme byte `vdf_scheme` 0 (the class group) and `era_vdf_t` at the reference rate of igneum-build-1's core (spec 4.6). Facts: the F7 harness shows the stand-in grindable with one block of hash at no delay and the VDF closing it; the first era with a VDF is era 1, 180 days after a network's genesis; the P2P record relay (O-4.10) is owed before then. Recommendation: igneum-testnet-1 and mainnet carry `era_vdf_activation_daa: 0` in their genesis objects (the switch costs nothing before era 1 and the digest then pins it from the start); the live devnet keeps never (it will not reach era 1). Unblocks: the freeze of the era draw procedure and the C_era cut rule, which the attack pass's F7 row holds open on the VDF. + +Question 2, the cut's binding (O-4.11). The node names the cut block as the chain block the lead rule names, certified or not (the O-4.3 reading of 3 October 2026), so a finality pause across the cut never leaves an era without a seed and the rule is a function of the header's past alone. The design document's wording binds the era draw to the last certified checkpoint. Facts: the grinding defence does not depend on the binding (the delay makes any candidate's draw unknowable); the certified binding couples the era seed to finality liveness and needs a rule for a certificate that lands after the cut (`docs/analysis/era-vdf-2026-10-07.md` section 4). Recommendation: keep the O-4.3 reading for the era as for the epoch; one function (`EraVdfManager::cut_block`) changes if the finality lane wants the certified binding. Unblocks: the sentence in spec 4.4 step 1 stops carrying "under the O-4.3 reading" once decided. + diff --git a/docs/plans/relay-deploy-2026-10-07.md b/docs/plans/relay-deploy-2026-10-07.md new file mode 100644 index 000000000..fdebbac5a --- /dev/null +++ b/docs/plans/relay-deploy-2026-10-07.md @@ -0,0 +1,16 @@ +# Relay deploy, 7 October 2026 (the X23 tree, MF-11) + +| What | Value | +|---|---| +| Deployed | 2026-10-07 15:38 BST, from branch update-return bd9b4f4e, relay/ | +| Production deployment | https://igneum-relay-iabqarnby-igneum.vercel.app (inspect KHyscUSVKueXueqxvZBRKkaUHwJR), aliased https://relay.igneum.network | +| Previous production | https://igneum-relay-bgy767z40-igneum.vercel.app | +| Env added | RELAY_RUN_PUB (the public half of ~/.config/igneum/relay-run-key, made by `node tools/relay.mjs keygen` the same hour); RELAY_INTAKE_COMPAT unset | +| Read-backs | /wake answers; fn=machines carries the bound field; the console page answers 200 and c/machines carries poll fields; a v1-shaped register by hostname (key tier) answers named:false bound:false; a signed start-app from the Mac answers 200 (item 394); an unsigned run from master's old tool is refused | + +## Rollback + +`cd relay && npx --yes vercel@latest --global-config ~/.config/igneum/vercel --scope igneum rollback https://igneum-relay-bgy767z40-igneum.vercel.app` +(or `vercel promote https://igneum-relay-bgy767z40-igneum.vercel.app`). Seconds; nothing to undo in the database: the X23 code adds relay_machines.secret_hash and the +table relay_wake_seen, both ignored by the old code. What a rollback loses: signed run verification (the old relay never +had it), the start-app kind, the ping; PC 2's new agent registers by hostname on either. diff --git a/docs/plans/release-0.3.20.md b/docs/plans/release-0.3.20.md index 2f1a47494..07e94ebc9 100644 --- a/docs/plans/release-0.3.20.md +++ b/docs/plans/release-0.3.20.md @@ -501,3 +501,55 @@ sha256 45be9b02d1b002f5 asserted at the put, igneumd/2.1.0-c4459193 in the node' **PC 2 out of the waves too (main via the Counter lane, 14:5x BST):** the project lead is taking PC 2 down for cable work (PC 1 is back, but it is his desk and no job goes to it); both PCs update on their pollers on return, their lock lines "offline at the sweep, updates on return". The sub-version-2 Windows G1 completed on PC 2 before it went down (13:46:36 to 13:46:50Z, exit 0, eight of eight fingerprints equal to the Mac's). Wave 1 is the Mac, the hands and the fleet. **c19-1's last pin lines (the fleet; FORM END rc 0 at 13:50:53Z):** mining at +666 s 34.3 MH/s, mined 66, accepted 66, rejected 0, got_reject 0, wrong_version 0, isSynced true at the tip on every read, the exec follower moving; the hub holds 41 blocks by c19-1's key 2c7cc291d38579e0 in its last 700, rejects naming the pod 0; the restart on the kept datadir 13:47:15Z: the stop and the start inside seven seconds (09124180's poll proving itself against b7cc37e7's LOCK death), synced again 13:48:39Z (157,048 blocks, 4 peers), 84 seconds after the kill, isSynced true on the first read and never false after; 109 templates in the read, max template_ms 3,432, "template fetch timed out" 0; the kept read passed at 13:38Z. Every line the rule reads is in from c19-1; CASES END from c20-1 is the one left (about 14:50Z). c19-1 stays up until the shipper's word. p1-5090 ran the sub-version-2 G1 meanwhile (eight of eight equal to the Mac's) and is back under its supervisor. + +**The prover roll corrected (the fleet, 15:0x BST):** box-prover's "RESULT paid" line read the segment record's `paid` field without comparing its keyHash to the box's own, so a segment paid to ANY prover printed as the box's pay; this morning's PAIRED verdicts rested on it. The truth from hub-1's segment records (157486..164691, 899 segments, 378 paid) by paid.keyHash: p1-4090 94, p2-4090-3 54, hub-1 41, p1-4070 20, p2-4070-1 11, p12-vast 3, two keys the registry does not hold (bb9f9057a373f647 99, the devnet's biggest payer; e809e39672ed32db 56), and ZERO in two hours for p1-5090, p2-4090-1b, p2-3090-1 to 4 and p1-a5000. So: the pair is on 13 of 13 and pairs on every box; 5 of 13 are paid by the chain's record, 7 are not (their logs under read: race or stuck); the 12 GB race reading was half right (p2-4070-1 at 12 GB is paid 11 times while the 3090s and the 5090 are not, so card size is not what holds those six). The 12 GB line, real: p12-vast was paid three segments by its own key on the bare 55768f88 node, each claimed behind the settled floor (164438 claimed 13:41:00Z paid at carrier 164494 5.8388 IGN; 164502 at 13:45:06Z paid 4.8263; 164510 at 13:48:58Z paid 4.5727); on c4459193 with the verifier env (13:31 to 13:37Z) the statement was accepted and no race won in that window: the pin's line is "statement accepted, 0 paid in six minutes", not blocking. box-prover fixed (gpu-fleet 4c872785: a paid line only on its own key, "paid_other" otherwise), on every standing box; running provers take it at their next restart by kill file, which the sweep's prover roll does. Who holds bb9f9057 and e809e396 (PC 2's app, the Mac, the hands' CPU prover) is for main. + +**Docs on master (15:01 BST):** the 0.3.20 plan, release-rules.md and the 0.3.21 plan landed as ship-docs-0320 3ad0c60d through tools/ci/merge-to-master.sh (the full gate green on the branch, 52 checks; the merge 41e0eb45). From here plan rows land the same way. + +**The two paid prover keys outside the fleet's registry (15:3x BST):** e809e39672ed32db (56 segments in two hours) is PC 2's card 1, identity 1 (label win-1ccfe586-1-1; read by the build-server lane's read-only job run-20261007-142054 on PC 2 at 15:38 BST through the installed igneum-miner's key-hash; PC 2 is back since the cable work). bb9f9057a373f647 (99 segments, the devnet's biggest payer) is none of PC 2's seven labels, nor the Mac's (mac-d937c69d-1 = 8fafda27…), and build-1 runs no prover; PC 1 (labels win-ae432dc7-1/-2 and their identities) is the remaining candidate, its key read by the project lead from the Prove page's Details on main's ask (no job on PC 1). For 0.3.21 the app reports its vote key hashes to the intake on every poll, so this is never a hand read again. + +**Devnet 2 (the fleet, 15:4x BST):** dn2-override.json is an eleven-field object without the v4 floor or window, so Devnet 2 has no flip date and the 13 October line does not apply to its lock lines; igneumd-83702a35 and c4459193 both print digest 4a0b8726… on it, so wave 3 is a plain binary swap on the four pods (read-back 4a0b8726) and bps-seed moves at the build-server lane's convenience with no digest step. The cases on c20-1: the poison pod mining from 14:41:25Z, the thirteen polls to about 14:54Z, the restart and the hub read after: CASES END about 14:57Z (15:57 BST); the per-box sweep form rehearsed on w-target meanwhile. The publish about 16:00 BST on it. + +## 38. 0.3.20 LIVE (15:54:17 BST, 7 October 2026) + +**Main's word (15:4x BST):** (b): publish on the dc141409 cases plus the diff argument and the c19-1 relay evidence; the separate-host relay re-run (CASES END about 17:15 BST) is a halt condition: a FAIL stops the sweep after the wave in progress and rolls back by the per-box form; no public Discord card or site version bump until it reads PASS. The cases rerun on c20-1 was void on its relay half: RunPod put the target, the relay and the poison pods on one host and a pod cannot reach another on its own host by the public address (the no-hairpin class); the poison half stood (13 rejected, 0 accepted). The hairpin class is a rent-time host check in the fleet's script. + +**The cut:** live DAA 294,073 at 15:51 BST; the floor-moved file ov16-floor-900000.json (sha256 294f1f80f1c8aecf…): program_class_v4_activation_daa 831600 → 900000, window 86400 unchanged, the fifteen other fields as live; digest on c4459193 4bbbe8162ea9fff277aa5b16b4ffad9e2262ba5e6a5acac7b697ff77211e7328 (the live file reads eada4bda on the same binary). Staged in a scratch copy of the downloads folder (publish-manifest.sh --no-deploy --public with the DMG 73796c5f and the installer 45b2f3fb; publish-public.sh --hive with igneum-hive-0.3.20.tar.gz d9dd12df); the staged manifest differed from the live one in the override object alone; the staged folder's names differed from the live one in the 0.3.20 files added and the 0.3.19 and 0.3.17 public files pruned. The deploy step: the staged folder onto the live one, `vercel deploy --prod` (Production igneum-qu5chjxiq, aliased dl.igneum.network), 15:54:17 BST. Read back: the live manifest version 0.3.20, mac 73796c5f, windows 45b2f3fb, floor 900000; the three public aliases 200 (windows exe, mac dmg, hive tar). + +**The sweep's go (15:55 BST):** the fleet's wave 1 (hub-1 first, pool-1, the eight heaviest; the fleet-native pair a8d08da5 / 474273ce; read-back by commit string c4459193, digest 4bbbe816, synced; the lock line "sweep complete before 13 October 09:00 UK (the margin; the floor is now DAA 900,000)"), the hands in the same minutes (the build-server lane, mode 2 with the object and the digest), wave 2 on the first lock on the new side, wave 3 the Devnet 2 four as a plain swap (4a0b8726), bps-seed at the build-server lane's convenience with no file change; the seeds and the RPC filter untouched (main's (b)); PC 1 and PC 2 on their pollers on return; the Mac on its poller; the Mac mini a fresh install when the project lead has it up. The Discord card and the site's version line held for the relay re-run's PASS. + +**Correction to the sweep's node pair (16:02 BST):** the fleet-native igneumd a8d08da5 named in the go is gone: the shipper's scratch copy was overwritten at 13:55Z by the stopped 55768f88 chain's native step (05016dee, no c4459193 string) and the box's target-0320 path with it. The sweep's node pair for every fleet box is the build-server lane's c4459193 hands pair from the same tree (igneum 00249643, igneum-pow 8c728ca3, build-1, native 2.39, the string read back): igneumd a80ed39caf885d314f97ce88863afcb307cbb4acc45a10828b2443a41e5d27d2 (57,628,576 B), igneum-miner 70a5180f30fab73fde0b3f33cfd37d2d68899eab70290b86c924e02980b09afd (10,214,648 B). The shipped artefacts are unaffected: the hive tar (d9dd12df, smoked with c4459193 ×2), the Windows exes in the installer (49502cc7, c4459193 ×2) and the Mac node in the DMG (b306baba, c4459193 ×2) were verified from their own files. Scratch rule note: a chain writing into a shared --out directory must stop before another candidate starts; the restart on a new candidate reused the same out paths. + +**Wave 1, the hands (the build-server lane, 15:56:09 to 15:57:45 BST, rc 0):** igneumd a80ed39c installed as /srv/hands/bin/igneumd-2.1.0-c4459193, the sixteen-field object written (floor 900000, window 86400). observer-node restarted 15:57:08 from eada4bda: first executing line "exec state loaded from a snapshot: tip 165393", digest 4bbbe816 MATCHES, the commit string present, powEngine igneum-pow, blockrate bps 1, finalityDepth 43200, ghostdagK 18, mergeDepth 3600, pruningDepth 108000. node1 restarted 15:57:30: tip 165348, digest MATCHES, the string present, powEngine igneum-pow. Lock line carried. Seeds and the RPC filter untouched; bps-seed follows. + +**Interface 1.0.1 over the air (main's order, the shipper as publisher; 16:03:37 BST):** the 0.3.20 tree's app/igneum-app/ui packed as igneum-ui-1.0.1.tar.gz (408,212 B, sha256 0749f37c67c028c8cf1052ed099fea0f1cc159ad6cefdc75d74d2f2de1d9fc45), min_engine 0.3.20, signed with the release key (igneum-ota-sign sign-ui; key fingerprint 8f186e37…), staged first in a scratch copy of the downloads folder (the only field differing from the live token manifest: `ui`; the release notes kept by passing them back), then the deploy step (the staged folder onto the live one, vercel deploy, aliased 16:03 BST). `publish.mjs --verify`: the live manifest's ui entry against the bundle in the folder, sha256 matches, signature verifies. Not published to the public manifest: the publisher's --public arm fails on the ui entry ("the public igneum-app-latest.json would still carry the token": the ui URL is under the token path and publish-public.sh has no ui rewrite), so dl/public/ui/ is missing by design today; the apps read the token manifest, which is where the channel lives; the --public ui arm is a 0.3.21 packaging fix. The Mac's app taking 1.0.1 on its poller: read back below when it polls (hourly, or Settings > Check now). + +**Wave 1 (the fleet, 14:59:08Z):** on igneumd a80ed39c (the floor file 294f1f80 read 4bbbe816 on it on the scratch pod at 14:58Z), the lock before at checkpoint 9259, 80.4 percent; hub-1, pool-1, p1-5090, p1-4090, p2-4090-3, p2-4090-1b, p2-3090-1 to -4 moving in parallel; the miner 70a5180f for the prover roll behind the waves. The relay re-run's three pods carried the old file (eada4bda) and would have read a false FAIL beside the swept fleet; the floor file put on c19-1, c21-relay and c21-poison at 15:00:37Z, the run restarted 15:02Z after a script fault of the fleet's (fixed): CASES END about 16:20Z (17:20 BST), a read on the live digest. bps-seed is build-1 itself (a bare process under /home/build/dn2seed), the build-server lane's, the digest unmoved there. + +**Wave 1 read-back (the fleet, 15:04:51Z):** hub-1 on a80ed39c, igneumd/2.1.0-c4459193, digest 4bbbe816, override 294f1f80, the N13 rewrite line once, synced at 162,489 with 6 peers, the miner back; the same read on p1-5090, p1-4090, p2-4090-3, p2-3090-4 (1 to 2 peers, climbing); p2-4090-1b and p2-3090-2 on the new binary and digest with 0 peers yet (the old-digest peers refuse them, the new ones are the boxes landing beside them; miners held by the supervisor's zero-peer rule until they peer); pool-1's daemon stopped and its node starting on the supervisor's next pass; p2-3090-1 and p2-3090-3 not answering that read's ssh in time (the next pass). The panic counts on the first boxes (10 to 20) are the RocksDB LOCK class from the supervisor's retries while the old process still held the datadir, not consensus; every node is up regardless. The certificate line between waves about 15:10Z. + +**bps-seed (the build-server lane, 16:07:49 to 16:08:00 BST):** the Devnet 2 seed is a bare process on build-1 (/home/build/fleet-share/igneumd-83702a35…, --devnet-suffix=2, appdir /home/build/dn2seed, the eleven-field devnet2-override.json b75d1f58); both binaries read 4a0b8726 on that file first; SIGTERM, the native c4459193 (a80ed39c) started with the identical argument line, down 11 s; read back igneumd/2.1.0-c4459193, the string twice, the digest 4a0b8726 unchanged, the N13 line on the kept datadir, GRPC and P2P up, 23 "PoW accepted" in 20 s, no panic. + +**The Mac (this machine, in wave 1 on its poller):** its hourly check at 16:01 BST had read the 0.3.19 manifest (published 10:23Z) though the CDN served 0.3.20 since 15:54 BST, a stale read of seven minutes (the app's own cache or a stale edge; a 0.3.21 note for the ui-ota health ping, which reads the same path); Settings > Check now at 16:04:58 BST read 0.3.20 (published 15:02:36Z), downloaded and ready by 16:05:20; the apply is the app's own (auto_update on), awaited; interface 1.0.1 after it. + +**0.3.21:** update-return-21b a64c193f (the eGPU card kind for a USB4 or Thunderbolt router in the device's parent chain, the Power Helper's fault line and its stale-prefix fix; app tests 255 + 32 + 8, UI 76) is ready on the lane's side; its push to origin is refused by GitHub ("remote: Internal Server Error", three tries 15:08 to 15:10Z), the lane retrying. + +**The Mac's apply is held by the app's own guard (16:12 BST):** update ready, wait = "the network lost 33% of its identities in the last 10 minutes; holding the update": the wave sweep restarts ten fleet nodes at once (each miner off for the 80 s restart, the zero-peer boxes held longer), the app reads that as an identity drop and holds its apply until the count recovers, then applies at its rollout slot (":MM past the hour", the per-machine minute). The guard is right by design (an app must not update into a shedding network); the consequence is that the apps' pollers apply after the fleet's waves settle, not alongside them. For the rules: a wave sweep and the apps' identity-drop guard interact this way; the publish record names the apps' apply times as they land. The Mac's apply time is read back below. + +**Wave 1 complete, wave 2 started (the fleet, 15:12 to 15:22Z):** all ten read back on the pin (a80ed39c, igneumd/2.1.0-c4459193, digest 4bbbe816, the file 294f1f80, the N13 rewrite line once, synced or catching up): hub-1 (10 peers), pool-1 (its node restarted 15:08:27Z), p1-5090, p1-4090, p2-4090-3, p2-3090-4, and p2-4090-1b, p2-3090-1, p2-3090-2, p2-3090-3. The fault behind the last four: the standing nodes run `--addpeer= --nodnsseed`; the seed's own move refused their handshake and they dialled nothing for 17 minutes at 0 peers (the six others had the hub in their address books); fixed by HUB_PEER (the hub as a second addpeer) in their supervisors and a kill-file restart, all four at 3 peers. The lock: hub-1's last LOCKED at checkpoint 9263 (15:05:03Z, 49.9 percent at the moment of locking; the folded certificate 98.1 percent, 13 of 16 voters, weight 4,954); no LOCKED since, the digest split's expected shape while the four wave-2 voters still vote on the old side; the first new-side lock being read. Wave 2 (p1-a5000, p1-4070, p2-4070-1, p1-3080) started 15:22Z on the 98.1 reading (their move brings weight onto the new side). Rule for the fleet's supervisors (from this): every standing node carries the hub as a second addpeer, so a seed's move never leaves a box peerless. + +**Master re-pinned (16:21 BST):** packaging/windows/node-source.pin on master moved to c4459193 (master-pin-0320 a0b44b48 through merge-to-master.sh, the full gate 55 checks green; the merge 6996ad3f), so master's windows-ci reads green at its payload-inputs step again (red on every master run since 6 October 21:15Z on the stale pin); release rule 14: master is re-pinned at every publish, a named line in the cut list. + +**The Mac on 0.3.20 and interface 1.0.1 (16:23 BST):** the identity-drop guard lifted as wave 1 settled; the app applied 0.3.20 on its own (updated_from 0.3.19), its node log node-20261007-152327.log starting 16:23:27 BST on igneumd/2.1.0-c4459193, digest 4bbbe816 on its own kept datadir (the N13 rewrite line once), synced at 164,411 blocks with 5 peers at 16:25; interface 1.0.1 taken over the air at 16:23:58 BST (source ota, published_version 1.0.1, active_version 1.0.1, embedded 1.0.0, confirmed true, no error). The Mac is in wave 1 as ordered. + +**Wave 2 and the first lock on the new side (the fleet, 15:23 to 15:29Z):** p1-a5000, p1-4070, p2-4070-1, p1-3080 read back on the pin (a80ed39c, c4459193, 4bbbe816, 294f1f80, the rewrite line once, synced); three sat peerless on the seed-only addpeer (wave 1's class) and carry the hub peer since 15:26Z. The lock: the old side's last at 9263 (15:05:03Z); the new side locked from checkpoint 9313 at 15:28:08Z (84.9 percent of active, 70.1 of total), 9315, 9316 (87.5 of active, 74.9 of total); a 23-minute gap while the table's weight split across the two digests, votes accepted at the hub throughout, no certificate at two thirds until all fourteen stood on the new digest with peers; the folded certificate at 9317 78.3 percent (14 to 15 voters). Equivocation warnings on the hub at 9280 and 9292 by four keys that are not fleet vote keys (e15fe94b, a405c3e6, 7b8ef6fd, ea53bd41: the Mac, PC 2 or the hands re-voting across the split); the fleet's keys did not equivocate. The supervisor rule is in: box-standing.sh adds the hub as a second addpeer by default (gpu-fleet 34ef30f8, README item 20, CLAUDE.md), on all fourteen, live at each next kill-file restart (seven already). Wave 3 (the Devnet 2 four, a binary swap, digest 4a0b8726) started 15:29Z; the prover roll runs behind waves 1 and 2 (the 70a5180f miner, the pair under bin-0320, box-prover with the key check and the drift flag). For the rules: a digest-moving sweep costs the chain its locks for the length of the split (23 minutes here); the hub plus the heaviest voters in one wave shortens it, and every node carrying the hub as a peer shortens it further. + +**Known red on the published pin, test-only (the node lane after the era VDF lane's read, 16:3x BST):** two consensus INTEGRATION test targets, consensus/tests/igneum_installed_signals.rs (`block_template_uses_current_block_version`) and consensus/tests/igneum_order_tests.rs, assert the signalled header version 1026 (object 4) while 8097d600 moved the class signal to object 5 and the header carries 1282; red on c4459193 and every commit since 8097d600; outside the suite set the node lane ran (the two installing-test targets were split into their own binaries this morning for the test-order race and left out of the set). The code is right; the tests are stale, 6b94c823's class. The pin stays c4459193 as published and swept (its binaries keep their commit string); the test-only fix (branch signal-tests-fix on the mirror, 1026 → 1282) is the FIRST step of 0.3.21's node order on 55768f88, and the rule from now: the two integration targets are in every suite set (`cargo test -p kaspa-consensus` without --lib). era-vdf-node 394a5902 is 0.3.22's (the shipper's call; every network at never, era 1 at least 180 days past a genesis). + +## 39. SWEEP COMPLETE (15:39Z, 16:39 BST) + +The devnet: hub-1, pool-1 and the twelve voters on igneumd a80ed39c (string c4459193), the floor file 294f1f80, digest 4bbbe816, the N13 rewrite line once each, synced, the miners back (the 70a5180f miner as the prover roll reaches each box); the first new-side lock 9313 at 15:28:08Z after the 23-minute split, locks every 20 to 40 seconds since at 70 to 81 percent of the total, the folded certificate 78 to 82 percent of the table. The hands (observer-node, node1) and the Mac on the pin with 4bbbe816; the Mac on interface 1.0.1. Devnet 2: dn2-seed, dn2-1, dn2-2, dn2-3 and bps-seed on c4459193, digest 4a0b8726 unchanged; a ten-minute four-way split from the fleet's Devnet 2 move (dn2-seed's supervisor env rebuilt without EVM_PORT and P2P_PORT, box-dn2.sh with no defaults, the seed's node refusing "--evm-rpclisten=127.0.0.1:"), healed at 15:36:25Z, all four at block 76,857 and a new lock at checkpoint 2313 at 15:39:38Z. The testnet seeds on 1c19441d by main's (b). PC 1 and PC 2 update on their pollers on return; the Mac mini a fresh install. Every lock line: "sweep complete before 13 October 09:00 UK (the margin; the floor is now DAA 900,000)". The prover roll runs behind the waves (p1-a5000 refused by design on its drift flag; hub-1 claiming on the pin). Open on the sweep: the relay re-run on c19-1 on the live digest, CASES END about 16:25Z (17:25 BST), the halt condition and the Discord card's gate; build-1's port 26621 (the Devnet 2 seed's p2p) reads closed from outside (a firewall rule predating the sweep; the build-server lane reads it); the two PCs' return. + +The fleet's six faults in the sweep, each a rule in its tooling now: the seed-only addpeer (seven peerless boxes, 23 minutes without a lock; the hub as a default second peer, 34ef30f8); the pool kill file's "all" taking pool-1's supervisor; the loop's expected digest and wanted sha left on the old pin; the cases script re-putting the old object (OVERRIDE input); the sweep's pow read-back term; the Devnet 2 env filter. The shipper's: the speculative build chains sharing one --out directory (a candidate's artefacts overwritten by the next chain's; the sweep's pair taken from the build-server lane's copy at /srv/artefacts/0320-c4459193/ instead), and the first order to the seeds with the devnet file (corrected before any box moved). + +**0.3.21 staging word given at 16:39 BST** (the node lane: c631c64b first on 55768f88, then the eight in order; the whole suite set; the candidate's binary with every gate from the build on the warm set). The reliability injector pod rented at the same minute. diff --git a/docs/plans/release-0.3.21.md b/docs/plans/release-0.3.21.md index db2f8cfd2..d8db7b724 100644 --- a/docs/plans/release-0.3.21.md +++ b/docs/plans/release-0.3.21.md @@ -12,14 +12,18 @@ Tree: release-0.3.21 on origin, from release-0.3.20's closed tree (the 0.3.20 cu | sub-version 2 (the hash lane's 07a809a7, byte 7, id a788661687db4bb3), pending the F8 census (about 15:00 BST; pass = all 64 seeds under 1.2x of the window model plus the suite and G1 lines); if it fails or slips past 20:00 BST the node ships byte 5 again with the re-pin dropped | the Counter lane, the node lane | held | | the fork gate from horizon-node (6eb21fc9, six commits on finality.rs) | the node lane | dry-merged clean into c4459193 | | the node's own rust-toolchain.toml | the node lane | in place on its worktree | -| the under-12 GB prove-instead switch (section 2) | the shipper | to write after the 0.3.20 publish | -| the per-architecture prover server (section 3) | the shipper, the fleet | to write after the 0.3.20 publish | +| the under-12 GB prove-instead switch (section 2) | the shipper | in: settings.prove_instead, Cmd::ProveHold, the Prove page's row, provedefault helpers and tests; app gate on build-2 230 + 32 + 8, UI 74 | +| the per-architecture prover server (section 3) | the reliability lane (the app's capability check, MF-10 in cbd6f3a4), the fleet (the kit's server per arch) | the app half in | | pool-finish 434e8b9b (the pool crate: the TLS 1.3 member port with the authorize binding, the open pool, pool.md 10; fork pool-finish-node b0444f51 off 8097d600: the pool-mode miner, the IGNS/IGNP codec, pool_split_activation_daa at never on every network, so the digest does not move) and pool-mf-row 343dd83b (MF-11 in the register) | the pool lane | main's word 14:2x BST: rides 0.3.21 with the split switch at never; if it reds a 0.3.21 gate or costs more than one rebase round it moves to 0.3.22 | -| apps-harmony (the builder's redesign, Overview as the landing tab, the Prove switch fix), then gpu-logos on top of it, then ui-overlap-fixes, then scene-parity, in that order as they land, each with its own gate line | the UI lanes | to come | +| the UI branches (apps-harmony parked by the project lead's word, 14:2x BST; the Prove switch fix moved to gpu-logos): gpu-logos-21 in at fee49fc5, earnings-tidy-21 in, scene-parity-21 in, ui-overlap-fixes nothing to merge | the UI lanes | done | | MF-11 (the app not returning after update-now; PC 2 silent since the 0.3.19 update-now at 10:34Z, its relay agent dead with it, so no job or task reaches it): the register row, the UI lane owning the cause, the relay agent as a service surviving the app as the restart path | the reliability lane, the UI lane, the relay lane | the row asked | | the ids commit 55768f88 (`resolve_program_ids`: the override's fields, then the env or the host, then the embedded verifying keys; the exec suite 32 with the bare-node test known-failed first; built 13:35Z sha 279b1b690e854fc9): 0.3.21's FIRST node commit by main's word, with the ids gate (rule 4c) on every candidate | the node lane | on the mirror; its gates run under rule 4a | | the 0.3.21 node order (main, 14:4x BST), each with its own gate line, one rebase round or 0.3.22: on c4459193, 55768f88; miner-reliability-20 f067f7c1 and the late-join commit 70e4601e; pool-finish-node b0444f51; horizon-node 6eb21fc9 (the deep fork-choice fix, fork_gate never set); peer-directory-node db28d331 (the peer directory prototype, peer_directory_activation_daa at never, the IGNP announce only under --announce); the sub-version-2 re-pin held for the census. The horizon lane rebases its two onto c4459193 at the sweep-end word | the node lane, the horizon lane | staged tonight | | pool-finish-21 at 5e557171 on origin (release-0.3.21 5d153892 plus the ten pool commits, the tenth d5265fb3 the `--template-parallel` fix, default 2: the ten-member window's daemon queued ten template calls on one gRPC connection past its own timeout, 1,891 lines, no job for 36 minutes; site/miner.html carries the pool-fee sentence); igneum-pool 28 at 5e557171 on build-2, the app gate 226 + 32 + 8 at 54dd4c06 (the last commit touches pool/ and docs only); merged after the three UI branches with the app gate rerun at the merge | the pool lane | ready to merge | +| the genesis-forward lane's f95178a1 (consensus/src/consensus/services.rs, +5 −1: the difficulty manager takes `params.pow_epoch_blocks` instead of the process-wide static; names the lib-suite flake behind the horizon lane's two reds and main's "difficulty flake": two pruning-proof tests install a 60-block schedule process-wide, and a TestConsensus built in that window refuses block 61 with UnexpectedDifficulty; the lib suite 114 of 114 twice on build-2; the daemon unchanged) | the genesis-forward lane, the node lane | taken last in the node order, its own commit, the lib suite as its line | +| ui-overlap-fixes: nothing to merge for the miner (tools/ci/overlap-check.mjs read 0 overlaps on 4c89372a and on 50ffa562, the run on 3dc0832a in flight); the wallet's one finding at 927ad832 on ui-overlap-fixes-wallet off wallet-0.1.5 is the wallet's cut; the detector lands on master with the site fixes | the overlap lane | closed for 0.3.21 | +| the app reports its vote key hashes to the intake on every poll (main, 15:2x BST: the two paid devnet keys outside the fleet's registry could only be read by hand on the PCs; chainfacts keeps reading the node's keys too): the labels from prover::labels and igneum-miner key-hash once per labels change, a `keys` field on the app's intake row, the console's machine line showing the first eight of each | the shipper | to write after the 0.3.20 publish, before the 19:30 app gate | +| update-return (the MF-11 lane, bd9b4f4e off 4c89372a), main's word 15:2x BST: the app half (ota.rs: the Windows helper owns the update's return with the kept exe set, a 120 s api/state poll, a rollback and one intake line either way; engine.rs: the read-back line "update-return: app up after the update from ", FAULT pc-restart after a power loss, the tuner ceiling and the refused-cap ladder; ember.rs; jobrun.rs the job-channel ping on wake; bootcheck.rs; platform.rs), app/windows/host.cpp (a dead engine restarted, WM_QUERYENDSESSION answered; about 60 new C++ lines) and the installer (/IGNOTA=2) ride 0.3.21 if they rebase in one round as update-return-21; the cut's windows.yml run compiling host.cpp is a NAMED GATE LINE (no host.cpp ships uncompiled). The relay half (the v3 agent as a service, playbooks, the X23 signed-run lib) lands through master on the relay lane's line with the relay deploy decision, main's | the update-return lane | rebasing | | 0.3.20's version strings moved to 0.3.21 | the shipper | 0d7b9bd0 | | master 819d536b merged (the 51-check gate; build-remote routes by load; the hands script's pgrep in the bracket form) | the shipper | c83ca904, 0b75cf52 | @@ -47,6 +51,20 @@ sha256 279b1b690e854fc9, the string read back, pairing 8c728ca3 at byte 5. The d **scene-parity-21 in (14:5x BST), ahead of ui-overlap-fixes-21 in the order because it was green on the exact tip (50ffa562) while ui-overlap-fixes still rebases:** 20c9153b (0d75bc1f the shared scene/ folder and live-dag.js 2.0.3, c1334faf the app side, 20c9153b the parity harness and its gate line). Lines: build-2 app gate 228 + 32 + 8; UI 72; pre-push 56 with four new chain-scene checks (sync byte-equal, the paint-on-push known-failed test, the feed contract, the parity render on build-2: home fold = /live = app Inspect at T+0, +2, +4 s). live-dag.js 2.0.2 → 2.0.3 (paint on every push whatever the visibility, the blank /live fix; the phone rule on the viewport width); proof-core.js unchanged 2.0.0; the site's copies moved on master f7743534 (igneum.network/live-dag.js reads 2.0.3); the source is scene/live-dag.js, both copies written by `node tools/scene/sync.mjs`, the gate refuses drift, so the 0.3.21 pack carries the 2.0.3 bytes. Users see: the light theme's ember at the brand package's #D0420D, the chain feed asking 300 s, Inspect 420 px tall (seven lanes), the phone layout no longer frozen at launch width, api/live keeping the key id in `miner`. Captures: build-2 /srv/builds/scene-parity/igneum-wt-scene-parity/_out and scratchpad/scene/parity-out. +**scene-parity-21-sizing in (15:0x BST):** 7e15bf2f on 3dc0832a: live-dag.js 2.0.4 (the box's height follows the lanes through onSize and autoHeight, for /live; the app passes neither, its frames byte-identical, the parity test equal on every comparison); scene/, site/ and the app copy byte-equal; no Rust change, the app gate of 20c9153b stands; pre-push 56 green. The same 2.0.4 is on master at b9017422 and served by igneum.network. + +**pool-finish-21 in (15:0x BST):** 2eea335f (the ten pool commits rebased onto 3dc0832a, no conflict; the pool-fee sentence in site/miner.html). Lines at that tip on build-2: igneum-pool 28; the app gate 229 + 32 + 8. Merged after scene-parity-21-sizing (JS only, so the Rust gate stands). The app side of 0.3.21 now carries: driver-check, miner-reliability-21 (cbd6f3a4), gpu-logos-21 with the Prove switch fix, earnings-tidy-21, scene-parity-21 and its sizing (live-dag.js 2.0.4), pool-finish-21; still mine: the under-12 GB prove-instead switch (section 2). The app gate on the final tree runs on build-2 about 19:30 BST or as soon as the switch lands. + +**N15 rides 0.3.21's node line (the node lane, 15:1x BST):** branch numbering-fix at d8bceca5 (a6864e36 then d8bceca5, from 52e96c94): chain_path checks the first added block's selected parent against the tip record before anything is appended and hands the orphan records above the fork point to the reorg unwind (the shape that left p1-5090 two high: a reorg's removed list one short at 15:51Z on 6 October); a start-time self-check once per process walks the records from the restart pin against the DAG's selected parents, names the first break, unwinds above it and lets the follower re-walk (the shape that left p2-3090-3 46 high from a snapshot carrying its source's break); recordsContinuous and continuityBreak on igneum_getProvingStatus and igneum_getExecStatus (null, true, or false with the break's block), box-prover claiming only on true. The number is canonical by construction from the pin; the carrier's refusal by number stands (the statement binds the number). Two unit tests known-failed first; the exec suite 35 and the kaspad check green on build-2 at 14:13Z; the live line is the fleet's restart of p1-5090 and p2-3090-3 on the 0.3.21 candidate (the self-check naming #155958 and #158875, the unwind, offset 0 after). The 0.3.21 node order, final, on byte 5: 52e96c94, f067f7c1, b0444f51, 437f0438, 2e32d5f6, f95178a1, a6864e36, d8bceca5. + +**update-return-21 in (15:3x BST):** 9d838ae5, one commit on b4289c4a (the app half: ota.rs, engine.rs, jobrun.rs, ember.rs, platform.rs, main.rs, bootcheck.rs; app/windows/host.cpp; Igneum-Miner.iss /IGNOTA=2; one round, main.rs's mod list by union). Lines on the tree: build-2 app tests 247 + 32 + 8; UI 74; the Windows cross green on build-1 (igneum-app.exe 4,172,288 B sha256 5b0598ad…, system DLLs only). host.cpp compiles in the cut's windows.yml run: the named gate line. The relay half stays on update-return for the relay lane's line through master. + +**first-block-21 in (16:0x BST):** 6e555d47 on 064fb02b (ladder.rs: first_block_shown persisted in ladder.json, Ladder::start_run; engine.rs start_run at load and started_at on the state; app.js staleCard, firstWait, the first rung reading the flag; the ui-mock secondblock scenario). Lines: build-2 app gate 254 + 32 + 8 (seven new ladder tests); UI 67 (view 46, one new known-failed first); pre-push 56. No installer, node or host change. Captures ~/Desktop/igneum-previews-2026-10-07/first-block/01 and 02. + +**Three more in (16:2x BST):** update-return-21b a64c193f (the eGPU card kind from a USB4 or Thunderbolt router in the device's parent chain, the Power Helper's fault line and its stale-prefix fix; app 255 + 32 + 8, UI 76); first-block-21 at cc9141cb replacing 6e555d47 (main's "seen once": the first-block card waits until a window has shown it, POST api/card/seen, ladder.rs card_seen; app 255 + 32 + 8, UI 67); miner-reliability-21 at 018440ae (the register: MF-11 in the update-return lane's words, MF-12 the pool stall, MF-13 the Power Helper's stale count; code unchanged since 4a28eb59, CI success). UI tests on the merged tree 76 of 76; the app gate on build-2 at the merged tip below. GitHub refused pushes with "Internal Server Error" from about 15:25 to 16:18 BST, transient. + +**The node order, final (16:3x BST):** on 55768f88: c631c64b first (the test-only fix of the two stale integration targets, 1026 → 1282; both green on build-2 at 15:34Z), then 52e96c94, f067f7c1, b0444f51, 437f0438, 2e32d5f6, f95178a1, a6864e36, d8bceca5; the tip's suite set runs the consensus crate whole (`-p kaspa-consensus` without `--lib`: the lib and both integration targets) beside consensus-core, the miner, kaspa-pow, the exec suite and the three checks (the suite rule from the 0.3.20 known-red finding). era-vdf-node 394a5902 is 0.3.22's. + ## 6. The shape that ships: the 0.3.21 app tree over the field node c4459193 (main, 17:5x BST) No node gate for 0.3.21: the app tree ships over the node already in the field (c4459193, the 0.3.20 pin, digest 4bbbe816 on the floor file). The 96161037 line (N15's numbering class, the bare-node proving ids) folds into 0.3.22 and later; its canary cells (kept-datadir ids BOTH PRESENT, wipe canary c22-1 synced in 42 minutes, 23 for 23, restart synced in 1 min 24 s) stand as readings, not as this release's gate. diff --git a/docs/plans/release-0.3.22.md b/docs/plans/release-0.3.22.md index 7004dfa5d..eac04242d 100644 --- a/docs/plans/release-0.3.22.md +++ b/docs/plans/release-0.3.22.md @@ -57,3 +57,15 @@ Three commits on 96161037: bd710a36 the sub-version 3 re-pin (byte 7, igneum-pow **Testnet re-arm (main, through the build-server lane):** the arming on fork e6dd3afd (digest 4fbb2152, genesis 01294fd3) is void (old object; a go on it hard-forks at sub-version 3). The node lane cuts a testnet genesis object on release-0.3.22-node in the Devnet 3 shape (byte 7 from genesis, every activation at 0 that Devnet 3 has at 0, era VDF at 0, a past genesis timestamp with the future-genesis test beside it, no override file, the testnet's seeds and chain id as they are); the build-server lane builds the seed-class pair under /srv/artefacts/testnet-/seed/ and dry-runs wave1-0320.sh against seed1/2/3 at height 0; nothing onto a seed and nothing mines before the project lead's word (not before 15 October, LG-2). **0.3.21 Windows, the toolchain finding (18:37 BST):** PC 2's installer job (take 2, 68 s) verified the payload (igneum-app.exe 151803c7 prints "igneum-app 0.3.21", igneumd.exe 49502cc7 "igneumd 2.1.0") and stopped on PC 2's toolchain: no MSVC (no window host "Igneum Miner.exe", whose host.cpp changed in update-return-21) and no Inno Setup 6 (no installer; winget refused by the job as told). Three shapes put to main at 18:45 BST: the Mac entry now and Windows later (the manifest carries a platform that lands later; 0.3.20 Windows apps do nothing until their entry arrives); winget Inno Setup on PC 2 (still no 0.3.21 host); the host by mingw on the box (dry compile asked) or Windows held until GitHub returns and windows.yml runs. deploy.sh carries --mac-only for shape (1); the full preflight stands for the Windows entry. + +**Proving on Devnet 3 opens (the fleet, 18:45 BST):** dn3-x1's first segment 1024..1031 claimed 18:44:23 BST and SUBMITTED 18:45:49 (8 of 8 shards accepted, proof 1,272,909 bytes, 86.1 s end to end, peak 8,534 MiB on a 3060 12 GB); its record waits in dn3-g1's pool for a carrier; the paid-by-key line opens the 24-hour window for the project lead's mandatory-verification rule. Sizing: about 42 segments an hour per 12 GB card against 450 an hour made, so 11 cards reach a share of one; 14 more 3060 pods renting (about USD 0.85/h together, 20 a day). The 0.3.21 warm cases (CASES-W21 END rc 0, 18:47 BST, on 96161037): the target refused every version-1026 block (44,081 seen, 0 accepted), restarted back at the tip, the hub holds 900 of its last 900; the relay cell again reads the target's own refusal, not a relayed poison block, so Devnet 3's relay run (relay on the hands pair synced before the window, the twin peered to the relay alone) is where that cell gets read, and its CASES END is the card's gate. + +## 7. the project lead moves the apps to Devnet 3 tonight (19:1x BST): the pin, the tree, the clock + +**the project lead's word (through main, 19:10 BST):** the apps and the site's live page move to Devnet 3 now, not tomorrow. The clock: the 0.3.22 node pin at 19:15 BST; the Mac entry about 20:15 BST on channel devnet-3 (the floor file kept in the manifest for the 0.3.20 and 0.3.21 apps until the intake shows none below 0.3.22 for 24 hours); the Windows entry as its own entry when PC 2's smoke runs, about 21:00 BST, the 0.3.21 Windows entry skipped in its favour (said in the notes); the hive 0.3.22 package with the sub-version 3 kit published with the pin, the fleet's standing boxes moving in waves after the first lock; the site's live page pointed at the dn3 observer on build-1 after the first lock (about 20:10 BST), deployed from the box with the Vercel CLI as a site-only deploy of master's live tree (GitHub dark), edge time to main. Heights ride 0.3.23, set from the 0.3.23 sweep's finish with a two-hour margin (plan: 12:00 BST 8 October, difficulty v3 at the first multiple of 7,200 DAA at or after 14:00 BST, the other two 7,200 apart). + +**The pin: release-0.3.22-node = 34a2dbaa at 19:15 BST, no heights** (69d1b56e + the testnet object 6ed56f63 + the N15 kept-datadir fix dfae08e5; igneum-devnet-3 digest 83eb50cd unchanged, igneum-testnet-1 87d103b6 on the same binary). Gates on the exact commit: build-1 build 18:40:26 BST (igneumd bc25693c, node-lane pair under /srv/artefacts/0322-34a2dbaa/node-lane/); build-2 suites consensus 122, exec 37 (the new scan test), pow 17, miner 25, core 152 by 18:42:51; canary set green (shutdown 567 ms, override refused, handshake, mismatch rejection). The Devnet 3 join-and-restart read is the fleet's. Crossing cases on the fast-time harness: difficulty v3 pass GREEN 19:08 BST and known-failed FAIL as expected; the DAA-seconds rule and finality leave green on the chain's reading but the harness's checkpoint read used the wrong RPC parameter, rerun by 19:22 BST; no heights commit could carry gates by 19:15, so every height rides 0.3.23 (0.3.23 line: 18473645 = 43360992 + d840537b subsidy_per_block, gates green, digest edit list 25; daa61847 rebased by the genesis-forward lane). + +**The 0.3.22 app tree at 19:15 BST, release-0.3.22 c977786b on the box mirror:** 27ab317e (release-0.3.21 44b63ac9 + driver-check 46cc41e9) + pool-finish-21 8f2aae75 (the Devnet 3 split-read tool) + signing-22 e1b01654 (vote on by default pinned by test; Overview and Cards rows read signing or silent with the reason) + key-22 6501558f (scene/live-dag.js 2.0.5 legend, the app's chain card renders it, the site untouched) + c977786b (node_peers adds dn3-g1 64.119.209.250:21703 and dn3-g2 154.64.230.67:27017; self-test reads four). App gate on build-2 GREEN at every step (last 259 + 33 + 8, rc 0); pre-push 56 on each push. Riding if on the mirror by 19:45 BST, else 0.3.23: boot-start-22 (the engine starts at boot without a logon on Windows; a headless engine never reads a closed stdin as the host leaving), the export-wait reliability item (a worker never waits on the export past one retry interval), the driver-check hold-every-card-of-the-vendor rule, the UI lane's shard words. The Mac node pair builds on 34a2dbaa under the lock from 19:12 BST (r0322/mac-node-34a2dbaa.sh), then the DMG. + +**PC 2 tonight:** the take-4 0.3.21 installer (mingw host, run-20261007-175020) was picked up at 18:51:57 BST before its removal deployed and the runner's abort ended the install in its first second (the build-server lane's fault, two rules added to the job tooling: an installs-app job is never removable without --force; never remove a published job without reading the machine's latest line); the update-return lane re-ran the kept installer at 19:07:56 BST and the 0.3.21 engine then restarted four times a minute apart and died ("quit requested by the window host went away (stdin closed)" 3 s after the node start: an engine started by a parent whose stdin closes at once); the project lead reinstalled PC 2 by hand with the public 0.3.20 installer (45b2f3fb, the MSVC host; the public alias confirmed as that file by hash at 19:12:54 BST). PC 2 is read-only for every lane until its app uploads as 0.3.20; then the 0.3.22 installer job (--installs-app) and the smoke, one job at a time; then the Intel lane's driver retry with the minidump copy folded in (one UAC click). PC 1: released to the Counter lane's queue at 19:04:37 BST (the 0.3.21 MSVC host e223db18 built there in 9 s, collected by the relay Blob); one slot for the 0.3.22 host (app/windows/version.h moved to 0.3.22, host.cpp untouched). diff --git a/docs/plans/site-ui-5-shots/404__1440-dark.png b/docs/plans/site-ui-5-shots/404__1440-dark.png index 971b69d1a..c36a01e7a 100644 Binary files a/docs/plans/site-ui-5-shots/404__1440-dark.png and b/docs/plans/site-ui-5-shots/404__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/404__1440-light.png b/docs/plans/site-ui-5-shots/404__1440-light.png deleted file mode 100644 index 0cad44dfd..000000000 Binary files a/docs/plans/site-ui-5-shots/404__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/404__390-dark.png b/docs/plans/site-ui-5-shots/404__390-dark.png index 98b0561c2..8c165e332 100644 Binary files a/docs/plans/site-ui-5-shots/404__390-dark.png and b/docs/plans/site-ui-5-shots/404__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/404__390-light.png b/docs/plans/site-ui-5-shots/404__390-light.png deleted file mode 100644 index e69e7f1ae..000000000 Binary files a/docs/plans/site-ui-5-shots/404__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/app-band__1440-dark.png b/docs/plans/site-ui-5-shots/app-band__1440-dark.png new file mode 100644 index 000000000..3a17362a7 Binary files /dev/null and b/docs/plans/site-ui-5-shots/app-band__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/app__1440-dark.png b/docs/plans/site-ui-5-shots/app__1440-dark.png index 6f6a9b4d9..84ff889a2 100644 Binary files a/docs/plans/site-ui-5-shots/app__1440-dark.png and b/docs/plans/site-ui-5-shots/app__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/app__1440-light.png b/docs/plans/site-ui-5-shots/app__1440-light.png deleted file mode 100644 index 7c9077a76..000000000 Binary files a/docs/plans/site-ui-5-shots/app__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/app__390-dark.png b/docs/plans/site-ui-5-shots/app__390-dark.png index 80c2052bf..786d47070 100644 Binary files a/docs/plans/site-ui-5-shots/app__390-dark.png and b/docs/plans/site-ui-5-shots/app__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/app__390-light.png b/docs/plans/site-ui-5-shots/app__390-light.png deleted file mode 100644 index f5d933676..000000000 Binary files a/docs/plans/site-ui-5-shots/app__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/bench__1440-dark.png b/docs/plans/site-ui-5-shots/bench__1440-dark.png index 8d59fa565..e10c8d8d1 100644 Binary files a/docs/plans/site-ui-5-shots/bench__1440-dark.png and b/docs/plans/site-ui-5-shots/bench__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/bench__1440-light.png b/docs/plans/site-ui-5-shots/bench__1440-light.png deleted file mode 100644 index 46f5a0cd7..000000000 Binary files a/docs/plans/site-ui-5-shots/bench__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/bench__390-dark.png b/docs/plans/site-ui-5-shots/bench__390-dark.png index e57969e49..e7fa60a7a 100644 Binary files a/docs/plans/site-ui-5-shots/bench__390-dark.png and b/docs/plans/site-ui-5-shots/bench__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/bench__390-light.png b/docs/plans/site-ui-5-shots/bench__390-light.png deleted file mode 100644 index 02835baf2..000000000 Binary files a/docs/plans/site-ui-5-shots/bench__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/claims__1440-dark.png b/docs/plans/site-ui-5-shots/claims__1440-dark.png index a62362bf7..51de593f2 100644 Binary files a/docs/plans/site-ui-5-shots/claims__1440-dark.png and b/docs/plans/site-ui-5-shots/claims__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/claims__1440-light.png b/docs/plans/site-ui-5-shots/claims__1440-light.png deleted file mode 100644 index 16d76a319..000000000 Binary files a/docs/plans/site-ui-5-shots/claims__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/claims__390-dark.png b/docs/plans/site-ui-5-shots/claims__390-dark.png index aca29af59..d59a0394c 100644 Binary files a/docs/plans/site-ui-5-shots/claims__390-dark.png and b/docs/plans/site-ui-5-shots/claims__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/claims__390-light.png b/docs/plans/site-ui-5-shots/claims__390-light.png deleted file mode 100644 index 23e20bf0d..000000000 Binary files a/docs/plans/site-ui-5-shots/claims__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/dev-fee__1440-dark.png b/docs/plans/site-ui-5-shots/dev-fee__1440-dark.png index 5411bc7ed..ff181f158 100644 Binary files a/docs/plans/site-ui-5-shots/dev-fee__1440-dark.png and b/docs/plans/site-ui-5-shots/dev-fee__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/dev-fee__1440-light.png b/docs/plans/site-ui-5-shots/dev-fee__1440-light.png deleted file mode 100644 index 11d21d3a2..000000000 Binary files a/docs/plans/site-ui-5-shots/dev-fee__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/dev-fee__390-dark.png b/docs/plans/site-ui-5-shots/dev-fee__390-dark.png index 8967d6365..579f11b28 100644 Binary files a/docs/plans/site-ui-5-shots/dev-fee__390-dark.png and b/docs/plans/site-ui-5-shots/dev-fee__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/dev-fee__390-light.png b/docs/plans/site-ui-5-shots/dev-fee__390-light.png deleted file mode 100644 index 623a2c994..000000000 Binary files a/docs/plans/site-ui-5-shots/dev-fee__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/download__1440-dark.png b/docs/plans/site-ui-5-shots/download__1440-dark.png index a652840b1..ac1bd8efd 100644 Binary files a/docs/plans/site-ui-5-shots/download__1440-dark.png and b/docs/plans/site-ui-5-shots/download__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/download__1440-light.png b/docs/plans/site-ui-5-shots/download__1440-light.png deleted file mode 100644 index d67650d82..000000000 Binary files a/docs/plans/site-ui-5-shots/download__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/download__390-dark.png b/docs/plans/site-ui-5-shots/download__390-dark.png index bac29b767..ddb18130a 100644 Binary files a/docs/plans/site-ui-5-shots/download__390-dark.png and b/docs/plans/site-ui-5-shots/download__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/download__390-light.png b/docs/plans/site-ui-5-shots/download__390-light.png deleted file mode 100644 index 1eff43072..000000000 Binary files a/docs/plans/site-ui-5-shots/download__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/evidence__1440-dark.png b/docs/plans/site-ui-5-shots/evidence__1440-dark.png index 90527b73c..10e9ba10d 100644 Binary files a/docs/plans/site-ui-5-shots/evidence__1440-dark.png and b/docs/plans/site-ui-5-shots/evidence__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/evidence__1440-light.png b/docs/plans/site-ui-5-shots/evidence__1440-light.png deleted file mode 100644 index 7d8f26f6c..000000000 Binary files a/docs/plans/site-ui-5-shots/evidence__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/evidence__390-dark.png b/docs/plans/site-ui-5-shots/evidence__390-dark.png index 648b592ba..105fbd6bf 100644 Binary files a/docs/plans/site-ui-5-shots/evidence__390-dark.png and b/docs/plans/site-ui-5-shots/evidence__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/evidence__390-light.png b/docs/plans/site-ui-5-shots/evidence__390-light.png deleted file mode 100644 index b9f505133..000000000 Binary files a/docs/plans/site-ui-5-shots/evidence__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/explorer__1440-dark.png b/docs/plans/site-ui-5-shots/explorer__1440-dark.png index 3f2027499..10ae9b205 100644 Binary files a/docs/plans/site-ui-5-shots/explorer__1440-dark.png and b/docs/plans/site-ui-5-shots/explorer__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/explorer__1440-light.png b/docs/plans/site-ui-5-shots/explorer__1440-light.png deleted file mode 100644 index b45ba48e3..000000000 Binary files a/docs/plans/site-ui-5-shots/explorer__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/explorer__390-dark.png b/docs/plans/site-ui-5-shots/explorer__390-dark.png index 0d19ae844..d4a7c6443 100644 Binary files a/docs/plans/site-ui-5-shots/explorer__390-dark.png and b/docs/plans/site-ui-5-shots/explorer__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/explorer__390-light.png b/docs/plans/site-ui-5-shots/explorer__390-light.png deleted file mode 100644 index 44e94cf42..000000000 Binary files a/docs/plans/site-ui-5-shots/explorer__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/faucet__1440-dark.png b/docs/plans/site-ui-5-shots/faucet__1440-dark.png index 04df2a373..aa7e06aca 100644 Binary files a/docs/plans/site-ui-5-shots/faucet__1440-dark.png and b/docs/plans/site-ui-5-shots/faucet__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/faucet__1440-light.png b/docs/plans/site-ui-5-shots/faucet__1440-light.png deleted file mode 100644 index 131cfb8c7..000000000 Binary files a/docs/plans/site-ui-5-shots/faucet__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/faucet__390-dark.png b/docs/plans/site-ui-5-shots/faucet__390-dark.png index 37546d498..0a8e0a18d 100644 Binary files a/docs/plans/site-ui-5-shots/faucet__390-dark.png and b/docs/plans/site-ui-5-shots/faucet__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/faucet__390-light.png b/docs/plans/site-ui-5-shots/faucet__390-light.png deleted file mode 100644 index 7f4a26885..000000000 Binary files a/docs/plans/site-ui-5-shots/faucet__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/home__1440-dark.png b/docs/plans/site-ui-5-shots/home__1440-dark.png index 4e48d69cb..19ca9444c 100644 Binary files a/docs/plans/site-ui-5-shots/home__1440-dark.png and b/docs/plans/site-ui-5-shots/home__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/home__1440-light.png b/docs/plans/site-ui-5-shots/home__1440-light.png deleted file mode 100644 index 0bc50436c..000000000 Binary files a/docs/plans/site-ui-5-shots/home__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/home__390-dark.png b/docs/plans/site-ui-5-shots/home__390-dark.png index b05fa186d..58a306e2b 100644 Binary files a/docs/plans/site-ui-5-shots/home__390-dark.png and b/docs/plans/site-ui-5-shots/home__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/home__390-light.png b/docs/plans/site-ui-5-shots/home__390-light.png deleted file mode 100644 index 01fb4e32c..000000000 Binary files a/docs/plans/site-ui-5-shots/home__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/journey__1440-dark.png b/docs/plans/site-ui-5-shots/journey__1440-dark.png index d96b43fa7..785a74f3d 100644 Binary files a/docs/plans/site-ui-5-shots/journey__1440-dark.png and b/docs/plans/site-ui-5-shots/journey__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/journey__1440-light.png b/docs/plans/site-ui-5-shots/journey__1440-light.png deleted file mode 100644 index 0a41c221f..000000000 Binary files a/docs/plans/site-ui-5-shots/journey__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/journey__390-dark.png b/docs/plans/site-ui-5-shots/journey__390-dark.png index 9da013cf1..8c38275ca 100644 Binary files a/docs/plans/site-ui-5-shots/journey__390-dark.png and b/docs/plans/site-ui-5-shots/journey__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/journey__390-light.png b/docs/plans/site-ui-5-shots/journey__390-light.png deleted file mode 100644 index 4090b9093..000000000 Binary files a/docs/plans/site-ui-5-shots/journey__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/ledger__1440-dark.png b/docs/plans/site-ui-5-shots/ledger__1440-dark.png index 86947cc9b..a4ee3593c 100644 Binary files a/docs/plans/site-ui-5-shots/ledger__1440-dark.png and b/docs/plans/site-ui-5-shots/ledger__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/ledger__1440-light.png b/docs/plans/site-ui-5-shots/ledger__1440-light.png deleted file mode 100644 index 390440826..000000000 Binary files a/docs/plans/site-ui-5-shots/ledger__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/ledger__390-dark.png b/docs/plans/site-ui-5-shots/ledger__390-dark.png index d12a8a75f..17c6bd475 100644 Binary files a/docs/plans/site-ui-5-shots/ledger__390-dark.png and b/docs/plans/site-ui-5-shots/ledger__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/ledger__390-light.png b/docs/plans/site-ui-5-shots/ledger__390-light.png deleted file mode 100644 index 53c4cab66..000000000 Binary files a/docs/plans/site-ui-5-shots/ledger__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/litepaper__1440-dark.png b/docs/plans/site-ui-5-shots/litepaper__1440-dark.png index 6c93b25fd..e50028aa0 100644 Binary files a/docs/plans/site-ui-5-shots/litepaper__1440-dark.png and b/docs/plans/site-ui-5-shots/litepaper__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/litepaper__1440-light.png b/docs/plans/site-ui-5-shots/litepaper__1440-light.png deleted file mode 100644 index c33d1a6a7..000000000 Binary files a/docs/plans/site-ui-5-shots/litepaper__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/litepaper__390-dark.png b/docs/plans/site-ui-5-shots/litepaper__390-dark.png index 3ed56dcdf..162256784 100644 Binary files a/docs/plans/site-ui-5-shots/litepaper__390-dark.png and b/docs/plans/site-ui-5-shots/litepaper__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/litepaper__390-light.png b/docs/plans/site-ui-5-shots/litepaper__390-light.png deleted file mode 100644 index 9ff24e939..000000000 Binary files a/docs/plans/site-ui-5-shots/litepaper__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/live__1440-dark.png b/docs/plans/site-ui-5-shots/live__1440-dark.png index 616233b7d..21ce3f2e2 100644 Binary files a/docs/plans/site-ui-5-shots/live__1440-dark.png and b/docs/plans/site-ui-5-shots/live__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/live__1440-light.png b/docs/plans/site-ui-5-shots/live__1440-light.png deleted file mode 100644 index a9c10c9c3..000000000 Binary files a/docs/plans/site-ui-5-shots/live__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/live__390-dark.png b/docs/plans/site-ui-5-shots/live__390-dark.png index 525acd024..247b5c989 100644 Binary files a/docs/plans/site-ui-5-shots/live__390-dark.png and b/docs/plans/site-ui-5-shots/live__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/live__390-light.png b/docs/plans/site-ui-5-shots/live__390-light.png deleted file mode 100644 index c44435d46..000000000 Binary files a/docs/plans/site-ui-5-shots/live__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/metamask__1440-dark.png b/docs/plans/site-ui-5-shots/metamask__1440-dark.png index 67fb30318..0995a0c44 100644 Binary files a/docs/plans/site-ui-5-shots/metamask__1440-dark.png and b/docs/plans/site-ui-5-shots/metamask__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/metamask__1440-light.png b/docs/plans/site-ui-5-shots/metamask__1440-light.png deleted file mode 100644 index 6e38772da..000000000 Binary files a/docs/plans/site-ui-5-shots/metamask__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/metamask__390-dark.png b/docs/plans/site-ui-5-shots/metamask__390-dark.png index 60249a6d8..ba7e784a7 100644 Binary files a/docs/plans/site-ui-5-shots/metamask__390-dark.png and b/docs/plans/site-ui-5-shots/metamask__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/metamask__390-light.png b/docs/plans/site-ui-5-shots/metamask__390-light.png deleted file mode 100644 index a9e81934e..000000000 Binary files a/docs/plans/site-ui-5-shots/metamask__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/miner-band__1440-dark.png b/docs/plans/site-ui-5-shots/miner-band__1440-dark.png new file mode 100644 index 000000000..e903c5adb Binary files /dev/null and b/docs/plans/site-ui-5-shots/miner-band__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/miner__1440-dark.png b/docs/plans/site-ui-5-shots/miner__1440-dark.png index 58eeeba1e..cbd0425e0 100644 Binary files a/docs/plans/site-ui-5-shots/miner__1440-dark.png and b/docs/plans/site-ui-5-shots/miner__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/miner__1440-light.png b/docs/plans/site-ui-5-shots/miner__1440-light.png deleted file mode 100644 index af4a39a80..000000000 Binary files a/docs/plans/site-ui-5-shots/miner__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/miner__390-dark.png b/docs/plans/site-ui-5-shots/miner__390-dark.png index 17067bc2b..11e21cae2 100644 Binary files a/docs/plans/site-ui-5-shots/miner__390-dark.png and b/docs/plans/site-ui-5-shots/miner__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/miner__390-light.png b/docs/plans/site-ui-5-shots/miner__390-light.png deleted file mode 100644 index cf97e1da8..000000000 Binary files a/docs/plans/site-ui-5-shots/miner__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/miners__1440-dark.png b/docs/plans/site-ui-5-shots/miners__1440-dark.png index 1d50e22de..891eab2c8 100644 Binary files a/docs/plans/site-ui-5-shots/miners__1440-dark.png and b/docs/plans/site-ui-5-shots/miners__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/miners__1440-light.png b/docs/plans/site-ui-5-shots/miners__1440-light.png deleted file mode 100644 index 84acf77da..000000000 Binary files a/docs/plans/site-ui-5-shots/miners__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/miners__390-dark.png b/docs/plans/site-ui-5-shots/miners__390-dark.png index d3b30ac6a..7746a69c9 100644 Binary files a/docs/plans/site-ui-5-shots/miners__390-dark.png and b/docs/plans/site-ui-5-shots/miners__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/miners__390-light.png b/docs/plans/site-ui-5-shots/miners__390-light.png deleted file mode 100644 index 9755c6956..000000000 Binary files a/docs/plans/site-ui-5-shots/miners__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/provenance__1440-dark.png b/docs/plans/site-ui-5-shots/provenance__1440-dark.png index 17b4a63ff..21a06fa7f 100644 Binary files a/docs/plans/site-ui-5-shots/provenance__1440-dark.png and b/docs/plans/site-ui-5-shots/provenance__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/provenance__1440-light.png b/docs/plans/site-ui-5-shots/provenance__1440-light.png deleted file mode 100644 index eb435bbfc..000000000 Binary files a/docs/plans/site-ui-5-shots/provenance__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/provenance__390-dark.png b/docs/plans/site-ui-5-shots/provenance__390-dark.png index 1bc9ec68f..da664bb4c 100644 Binary files a/docs/plans/site-ui-5-shots/provenance__390-dark.png and b/docs/plans/site-ui-5-shots/provenance__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/provenance__390-light.png b/docs/plans/site-ui-5-shots/provenance__390-light.png deleted file mode 100644 index e3ccd5226..000000000 Binary files a/docs/plans/site-ui-5-shots/provenance__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/randomx__1440-dark.png b/docs/plans/site-ui-5-shots/randomx__1440-dark.png index 30775bcb9..7db0ae531 100644 Binary files a/docs/plans/site-ui-5-shots/randomx__1440-dark.png and b/docs/plans/site-ui-5-shots/randomx__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/randomx__1440-light.png b/docs/plans/site-ui-5-shots/randomx__1440-light.png deleted file mode 100644 index 6657940e6..000000000 Binary files a/docs/plans/site-ui-5-shots/randomx__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/randomx__390-dark.png b/docs/plans/site-ui-5-shots/randomx__390-dark.png index d72a607ca..ae64547be 100644 Binary files a/docs/plans/site-ui-5-shots/randomx__390-dark.png and b/docs/plans/site-ui-5-shots/randomx__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/randomx__390-light.png b/docs/plans/site-ui-5-shots/randomx__390-light.png deleted file mode 100644 index 1d2243a3d..000000000 Binary files a/docs/plans/site-ui-5-shots/randomx__390-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/wallet-band__1440-dark.png b/docs/plans/site-ui-5-shots/wallet-band__1440-dark.png new file mode 100644 index 000000000..e57644903 Binary files /dev/null and b/docs/plans/site-ui-5-shots/wallet-band__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet-band__390-dark.png b/docs/plans/site-ui-5-shots/wallet-band__390-dark.png new file mode 100644 index 000000000..cb301b10b Binary files /dev/null and b/docs/plans/site-ui-5-shots/wallet-band__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet-full__1440-dark.png b/docs/plans/site-ui-5-shots/wallet-full__1440-dark.png new file mode 100644 index 000000000..a7fc584ea Binary files /dev/null and b/docs/plans/site-ui-5-shots/wallet-full__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet-full__390-dark.png b/docs/plans/site-ui-5-shots/wallet-full__390-dark.png new file mode 100644 index 000000000..aaa93617e Binary files /dev/null and b/docs/plans/site-ui-5-shots/wallet-full__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet__1440-dark.png b/docs/plans/site-ui-5-shots/wallet__1440-dark.png index 23f0cc515..2c2a102c3 100644 Binary files a/docs/plans/site-ui-5-shots/wallet__1440-dark.png and b/docs/plans/site-ui-5-shots/wallet__1440-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet__1440-light.png b/docs/plans/site-ui-5-shots/wallet__1440-light.png deleted file mode 100644 index 13bad7c83..000000000 Binary files a/docs/plans/site-ui-5-shots/wallet__1440-light.png and /dev/null differ diff --git a/docs/plans/site-ui-5-shots/wallet__390-dark.png b/docs/plans/site-ui-5-shots/wallet__390-dark.png index bce819d34..385f01746 100644 Binary files a/docs/plans/site-ui-5-shots/wallet__390-dark.png and b/docs/plans/site-ui-5-shots/wallet__390-dark.png differ diff --git a/docs/plans/site-ui-5-shots/wallet__390-light.png b/docs/plans/site-ui-5-shots/wallet__390-light.png deleted file mode 100644 index c1e9d0202..000000000 Binary files a/docs/plans/site-ui-5-shots/wallet__390-light.png and /dev/null differ diff --git a/docs/plans/testnet-go.md b/docs/plans/testnet-go.md index 0668d6a8c..85dbaa6ac 100644 --- a/docs/plans/testnet-go.md +++ b/docs/plans/testnet-go.md @@ -135,3 +135,15 @@ Added by the launch-pack lane (branch `launch-pack`) from `docs/analysis/mission | LG-11 A signed proving customer | One customer paying for proofs at a published rate, or a signed letter of intent with a volume, before mainnet (the owner, 7 October 2026: a mainnet gate, not a testnet gate; the weight of the Devnet 2 gate: mainnet does not open without it) | the contract or the letter in the entity's records, a redacted copy linked from `docs/evidence.md`, the rate on the site; for the paying case the job market's payout contract shows a paid job for that customer; `grep -c "rollup signs for testnet" site/journey.json` is 0 after the handoff lands | M | NOT DONE: Taiko is named as the first customer and nothing is signed; the brief and the pilot progression are ledger X13 | the owner (the signature), the execution engineer (the paid job) | | LG-12 Hash origin daily for 90 days | The report posts every day for the first 90 days from the go, with no gap | `SELECT count(*) FROM hash_origin_reports WHERE day >= ''` reaches 90 with consecutive days; the timer's journal on the box shows a run per day | C | The job and its `--go ` flag exist; the timer is OWED (section 3 of the pack) | build-server lane (timer), the report | | LG-13 The disclosure prize | USD 50,000 for a reproduced break of the published hash class, paid in fiat by Igneum Labs LTD, announced only when escrowed and only when the entity's registered address exists on its documents and the owner gives the publish word | `docs/plans/funding.md` rule 3 (escrow before announcement); the staged text in docs/plans/cryptanalysis.md 3.3 on branch `cryptanalysis` (43d9700b, not on master yet); until the word, `grep -ci "50,000" site/*.html` is 0 | M (the announcement may come earlier, on the word) | APPROVED by the owner at 09:5x UK on 7 October 2026; STAGED; nothing public mentions it | the owner (escrow, the word), the cryptanalysis lane (the announcement) | + + +## LG-2 waived by the owner (7 October 2026, 19:5x BST) + +Launch gate LG-2 (seven daily hash-origin reports before the testnet) is waived by the owner, 7 October 2026 19:5x BST; the report +still runs daily from Devnet 3 (igneum-hash-origin-dn3.timer on build-1, 08:30 UTC, `--prefix dn3_`, DN3_GO_DATE 2026-10-07) and +from the testnet from its go. The testnet gate is now: the 24-hour proven window closed on Devnet 3 (about 19:00 BST on 8 October), +the 0.3.23 heights crossed on every Devnet 3 node, the launch text (LG-5) on the site, the seeds on the 0.3.22 object with the dry +run clean (done: fork 6ed56f63, digest 87d103b6, genesis 52a3e6a9, seed-class pair under /srv/artefacts/testnet-6ed56f63/seed/ on +build-1, three-seed dry run clean at height 0 at 18:44 BST), and the owner's word. The seeds stay armed for a go as early as the +evening of 8 October: `infra/build-server/wave1-0320.sh seeds --igneumd --sha256 80932b18… --miner +--digest 87d103b6… --commit 6ed56f63 --wipe-genesis --genesis 52a3e6a9… --go` on the word, nothing before. diff --git a/docs/spec/01-lottery-hash.md b/docs/spec/01-lottery-hash.md index f879a0f54..0bac08643 100644 --- a/docs/spec/01-lottery-hash.md +++ b/docs/spec/01-lottery-hash.md @@ -428,7 +428,7 @@ Designed at the level of a sentence in the design document ("a new instruction m ### 1.13.1 Era seed and draw -The era seed `E_n` is the 32-byte output of the 1-hour VDF of section 4.4. One SplitMix64 stream seeded from `seed_words_from_bytes("igneum-era/" || n_le64 || E_n)` words 0 and 1, drawn in a fixed order, sets the era parameters within genesis-fixed bounds: +The era seed `E_n` is the 32-byte output of the 1-hour VDF of section 4.4 (in the node from `era_vdf_activation_daa`, 7 October 2026, era VDF lane: the delay over the hash of the cut block's day under the genesis scheme byte; before the activation, and on every network today, the devnet stand-in below). One SplitMix64 stream seeded from `seed_words_from_bytes("igneum-era/" || n_le64 || E_n)` words 0 and 1, drawn in a fixed order, sets the era parameters within genesis-fixed bounds: | Parameter | Base (era 0) | Draw | Bound | |---|---|---|---| @@ -448,7 +448,7 @@ The table layout and the working-set window (Counter ASIC 2.0 layers 4 and 8, de 3. `R = 1 + below(31)`: the stride rotation. 4. to 7. `r_i = next()` for `i` in 0..3: the interleave draws. With `b = log2(W)` and `free = 4 - b`, `c = [b, ..., 15]`; for `i` in `0..free`: `j = i + (r_i mod (16 - b - i))`, swap `c[i]` and `c[j]`; the interleave is `pos = [0, ..., b - 1] ++ sort(c[0..free])`, four ascending bit positions below 16. -The era parameters are `(W, M, R, pos)`. Dataset mapping under class v3: word `w` holds word `j(w)` of item `t(w)`, where bit `i` of `j(w)` is bit `pos[i]` of `w` and `t(w)` is `w` with bits `pos[0..3]` removed; with `pos = [0, 1, 2, 3]` this is `dataset[w] = item(w >> 4)[w AND 15]` byte for byte; an item keeps its value at every dataset size of at least 2^16 words, and the `W` words of one aligned load lie in one item, so the 4,096-item verifier bound of 1.11 holds. Load address under class v3, for a load site with window draws `(k_off, o)` and a dataset of `2^D` words: `k = min(k_off, D - 26)`, `y = rotl(x * M, R)`, `idx = ((y AND (MASK >> k)) OR ((o AND (2^k - 1)) << (D - k))) AND MASK` (uniform on the window, branch-free, three operations before the mask), one text form in Metal, CUDA and OpenCL. The window draws per instruction (layer 8), after the nine draws of 1.4.3: `k_off = below(3)` (the dataset, a half or a quarter) and `o = low32(next()) AND (2^k_off - 1)`, used only on a load slot, so a class v3 program takes 720 draws; the window never goes below 2^26 words (256 MiB, above the largest on-chip cache in the benchmark) nor above the dataset, and sixteen sites with drawn offsets cover the dataset with high probability (a windows-union census over 300 programs: the SRAM mirror a chip would need is the whole dataset in every hour). The acceptance rule of 1.4.6 is unchanged in its tests and mirrors this address at its constant `D = 28`. Devnet stand-in for `E_n` until the VDF of 4.4 is in the node: era 0 the genesis block hash; era `n >= 1` the hash of the last selected-chain block whose DAA score is below `15,552,000 n - 7,200`. What the interleave buys and does not: a chip that hard-wires one layout reads the wrong 15 words with every word once the era draws another; a chip whose address decoder can permute its address lines pays nothing (stated in the plan). The stride is a bijection with no cryptanalysis yet (Open). +The era parameters are `(W, M, R, pos)`. Dataset mapping under class v3: word `w` holds word `j(w)` of item `t(w)`, where bit `i` of `j(w)` is bit `pos[i]` of `w` and `t(w)` is `w` with bits `pos[0..3]` removed; with `pos = [0, 1, 2, 3]` this is `dataset[w] = item(w >> 4)[w AND 15]` byte for byte; an item keeps its value at every dataset size of at least 2^16 words, and the `W` words of one aligned load lie in one item, so the 4,096-item verifier bound of 1.11 holds. Load address under class v3, for a load site with window draws `(k_off, o)` and a dataset of `2^D` words: `k = min(k_off, D - 26)`, `y = rotl(x * M, R)`, `idx = ((y AND (MASK >> k)) OR ((o AND (2^k - 1)) << (D - k))) AND MASK` (uniform on the window, branch-free, three operations before the mask), one text form in Metal, CUDA and OpenCL. The window draws per instruction (layer 8), after the nine draws of 1.4.3: `k_off = below(3)` (the dataset, a half or a quarter) and `o = low32(next()) AND (2^k_off - 1)`, used only on a load slot, so a class v3 program takes 720 draws; the window never goes below 2^26 words (256 MiB, above the largest on-chip cache in the benchmark) nor above the dataset, and sixteen sites with drawn offsets cover the dataset with high probability (a windows-union census over 300 programs: the SRAM mirror a chip would need is the whole dataset in every hour). The acceptance rule of 1.4.6 is unchanged in its tests and mirrors this address at its constant `D = 28`. Devnet stand-in for `E_n` below the activation of the VDF of 4.4 (the VDF is in the node since 7 October 2026, behind `era_vdf_activation_daa`, never until the project lead sets it per network): era 0 the genesis block hash; era `n >= 1` the hash of the last selected-chain block whose DAA score is below `15,552,000 n - 7,200`, the same block the VDF reads its input from once active. The attack pass's F7 harness showed the stand-in grindable with one block of hash at no delay (1 of 6 cuts) and the VDF closing it (`docs/analysis/era-vdf-2026-10-07.md`). What the interleave buys and does not: a chip that hard-wires one layout reads the wrong 15 words with every word once the era draws another; a chip whose address decoder can permute its address lines pays nothing (stated in the plan). The stride is a bijection with no cryptanalysis yet (Open). "Memory pattern" in the design document is read here as the item-address pattern (the cache line index word, `s[0]` in 1.8.5, and the XOR-all-sixteen rule); the proposal is to leave it fixed at era 0 and let the unlocked families change the kernel instead, because every change to the item derivation changes the verify time and must be re-measured. diff --git a/docs/spec/04-seeds-and-vdf.md b/docs/spec/04-seeds-and-vdf.md index 0a08fa5df..48e7bcbcf 100644 --- a/docs/spec/04-seeds-and-vdf.md +++ b/docs/spec/04-seeds-and-vdf.md @@ -1,6 +1,6 @@ # Igneum protocol specification, section 4: epoch and era seeds through the class-group VDF -Spec version 0.1, 3 October 2026. Status of this section: Measured for the VDF primitive on one machine (`proto-vdf/`, `docs/bench-log.md` entry "proto-vdf, Wesolowski VDF"); Designed for the pipeline; Open where marked. The class-group code has not been reviewed by a second cryptographer (`proto-vdf/README.md`, open item 1). +Spec version 0.1, 3 October 2026. Status of this section: Measured for the VDF primitive on one machine (`proto-vdf/`, `docs/bench-log.md` entry "proto-vdf, Wesolowski VDF"); the ERA path Implemented in the node on 7 October 2026 (era VDF lane, fork branch `era-vdf-node` on the 0.3.19 line: `consensus/core/src/era_vdf/`, `consensus/src/processes/era_vdf.rs`; record `docs/analysis/era-vdf-2026-10-07.md`), behind `era_vdf_activation_daa` (never on every network until the project lead sets it per network), with the scheme byte of 4.2 and the measured reference rates of 4.6; the EPOCH path (4.3) still Designed. The class-group code has not been reviewed by a second cryptographer (O-4.1; the node's port is a second implementation of the same algorithms on a fixed-width integer, checked against `num-bigint` and against the textbook composition, not a review). ## 4.1 Why a delay @@ -24,7 +24,16 @@ proof = (T, y, pi) verify: rederive D and x, recompute l, check pi^l * x^(2^T mod l) == y, recompute output ``` -Tags (Implemented in `proto-vdf/src/seed.rs` for the epoch path): `tag_D = "igneum-epoch-discriminant"`, `tag_l = "igneum-vdf-challenge"`, `tag_out = "igneum-program-seed"`. The era path uses `"igneum-era-discriminant"` and `"igneum-era-seed"` (Designed, not yet in code). Prime |D| kills the 2-torsion, the low-order element Wesolowski must exclude. Whether to mirror chiavdf's byte layout for HashPrime exactly, and whether the proof should carry D (the verifier otherwise pays a 17 ms average prime search), are Open (O-4.5). +Tags (Implemented in `proto-vdf/src/seed.rs` for the epoch path): `tag_D = "igneum-epoch-discriminant"`, `tag_l = "igneum-vdf-challenge"`, `tag_out = "igneum-program-seed"`. The era path (Implemented, `kaspa_consensus_core::era_vdf`) uses `"igneum-era-discriminant"` and `"igneum-era-seed"`, with the scheme byte in the seed preimage: `E_n = SHA-256("igneum-era-seed" || scheme || input || T_be64 || y)`. Prime |D| kills the 2-torsion, the low-order element Wesolowski must exclude. The node derives D itself once per era (the search is a per-era one-off, measured in 4.6) and verifies with the group held; HashPrime's byte layout is this specification's (a 64-bit big-endian counter suffix, not chiavdf's in-place increment), which O-4.5 keeps open only for tooling compatibility. + +**The scheme byte and the fallback (7 October 2026, era VDF lane; mission item 8, `docs/analysis/mission/future.md` 7.4 item 5).** The era VDF is one of two schemes behind a genesis byte `vdf_scheme` (`Params::vdf_scheme`, in the digest with the activation and T once the activation is set), the same shape as the vote keys' `sig_scheme`: a flip is a class change under the 95 percent signal with a floor height, never a fork. The bytes are coordinated with the genesis-forward lane's `sig_scheme` (0 = BLS12-381 there; the two bytes are separate fields with the same mechanism, `era_vdf::scheme_known` and `igneum::sig_scheme_of_class` the two tables a class change fills). + +| Byte | Scheme | Delay | Proof | Verify | Why it exists | +|---|---|---|---|---|---| +| 0 | Wesolowski over the class group of a 1,024-bit prime discriminant derived from the input (this section) | T squarings | (y, pi), 516 bytes (13 bytes of framing on the wire, `EraVdfProof::to_bytes`) | two short exponentiations, milliseconds (4.6) | the production choice: no trusted setup, Chia precedent | +| 1 | SHA-256 hash chain: `s_0 = SHA-256("igneum-era-hash-chain" || input)`, `s_{i+1} = SHA-256(s_i)`, `y = s_T` | T hashes | the end state, 32 bytes | recomputation: the full delay on one core | the post-quantum fallback: a class group's order is computable on a cryptographically relevant quantum computer (Hallgren's algorithm, polynomial time for imaginary quadratic class groups), and a known order collapses `x^(2^T)` to one short exponentiation; a sequential hash has no known quantum shortcut (Grover does not apply to a sequence) | + +The fallback costs every verifier the full delay, which 4.5 already asks of every mining node (one core for an hour per era); what it loses is the 5 ms check for light clients and syncing nodes, who then take `E_n` from the chain's own work (a block mined under the wrong `E_n` fails its proof of work under the right program) or recompute. The flip is sized, not scheduled: `T` for scheme 1 at the reference core is in 4.6. | Parameter | Value | Label | |---|---|---| @@ -56,12 +65,14 @@ Determinism of step 1 is the point of the rule: which block is "the checkpoint a ## 4.4 The era seed pipeline -Designed (design document: "The era draw applies a one-hour delay function to the hash of all blue blocks in the day ending at the last certified checkpoint one epoch before the boundary"). Era n is the DAA-score interval `[15,552,000 n, 15,552,000 (n + 1))` (section 1.12). +Implemented in the node on 7 October 2026 (era VDF lane; design document: "The era draw applies a one-hour delay function to the hash of all blue blocks in the day ending at the last certified checkpoint one epoch before the boundary"; `consensus/src/processes/era_vdf.rs`, `consensus/core/src/era_vdf/`). Era n is the DAA-score interval `[15,552,000 n, 15,552,000 (n + 1))` (section 1.12; `igneum::pow_era_blocks`, a constant on every network that a private test network's override file may shorten with `pow_era_blocks` and `pow_era_lead`, in the digest when it does). The pipeline applies to every era whose start is at or above `Params::era_vdf_activation_daa` and never to era 0 (genesis seeds it); below the activation the devnet stand-in of `docs/plans/era-layout.md` section 2 stands (the cut block's hash itself). -1. `C_era(n)` is the highest-index checkpoint whose block has DAA score at most `15,552,000 n - 7,200` (2 hours of lead, 2x the 1-hour evaluation). -2. `input = Hash(chain_id || n_le64 || h_1 || h_2 || ... || h_m)` where `h_1..h_m` are the hashes of the blue blocks in `C_era(n)`'s past with DAA score in `(daa(C_era(n)) - 86,400, daa(C_era(n))]`, in ascending (blue score, hash) order, and `Hash` is the chain's BLAKE2b-based hash. This is a function of `C_era(n)`'s past, so it is as deterministic as 4.3 step 1. -3. Run 4.2 with `T = T_era = 6 x T_epoch` and the era tags. `E_n` is the output. -4. The era draw of section 1.13.1 consumes `E_n` as its only randomness (`proto-vdf/README.md` open item 6: check that nothing else enters the draw). +1. **The cut block.** The cut of era n is the DAA score `15,552,000 n - 7,200` (2 hours of lead, 2x the 1-hour evaluation; `igneum::pow_era_seed_score`). `C_era(n)` is the last selected-chain block below the cut on the chain of the header being validated (`class_signal::seed_below`, the block the stand-in used as `E_n`). This is the checkpoint block the cut rule names under the O-4.3 decision of 3 October 2026 (3.11 item 6: the seed checkpoint is the chain block the lead rule names, certified or not, so a finality pause never stops the program): a function of the header's own past, so two nodes validating one header derive one `C_era(n)`, and a header on a chain that reorged across the cut names another block and is validated under that block's seed. Binding `C_era(n)` to the certified checkpoint instead (the certificate carried by a block in the header's past, the design document's wording) is a change to one function, `EraVdfManager::cut_block`; it would couple the era seed to finality liveness (a pause across the cut leaves the era without a seed) and needs a deterministic rule for a certificate that lands late, which the record (`docs/analysis/era-vdf-2026-10-07.md`, section 4) spells out for the finality lane; the grinding defence does not depend on it, since the delay is what makes any candidate's draw unknowable. +2. **The input.** `input = Hash(chain_id || n_le64 || h_1 || h_2 || ... || h_m)` where `h_1..h_m` are the hashes of the blue blocks in `C_era(n)`'s past with DAA score in `(daa(C_era(n)) - day, daa(C_era(n))]`, `day` being the dataset day (`pow_day_ms / 1,000`, 86,400 DAA s on the devnet) at the network's block rate, in ascending (blue score, hash) order, and `Hash` the chain's BLAKE2b-256 keyed `"IgneumEraVdfInput"` (`era_vdf::era_vdf_input`; `chain_id` the prefixed network name the finality votes use). Walked as the class signal walks a window: every chain block's mergeset blues once each, down to the merge depth below the day's start. A function of `C_era(n)`'s past, memoised per cut block. +3. **The delay.** `era_vdf::evaluate(scheme, input, T_era)` with `scheme = Params::vdf_scheme` and `T_era = Params::era_vdf_t` (4.6): under scheme 0, 4.2 with the era tags; under scheme 1, the hash chain. Every node runs it itself on one thread (the prover's residue classes on up to 8), started by the virtual processor once the sink is a quarter of the lead past the cut (the epoch seed's confirm margin: right at the cut the selected chain still flips between sibling tips), and persisted (`DbEraVdfStore`, one row per era: input, proof, `E_n`) when it ends, an hour before any header of the era can exist under the 2x lead. A header that arrives before the node holds the record (a node syncing across an era boundary with no peer's proof, 4.5) waits for the evaluation on the header processor's thread. +4. **The seed.** `E_n = SHA-256("igneum-era-seed" || scheme || input || T_be64 || y)`, which the era draw of section 1.13.1 consumes as its only randomness (O-4.8: the draw's preimage is `"igneum-era/" || E_n`, nothing else; the node hands the generator `E_n` alone through `EpochSeeds::era`). Every block template reports `E_n` as `era_seed`, the input, the scheme, T and the evaluation state (`PowEpochInfo`), and reports no `era_seed` while the node is still evaluating, on which the miner holds (`igneum-miner`: "era VDF: the node is still evaluating"). + +The gate the attack pass set (F7 sub-row a, `docs/analysis/attack-pass/f7-era.md`): the re-roll harness fires with the VDF off and is silent with it on. Measured 7 October 2026 on the box, `tools/era-vdf/reroll.mjs` against the real era cut on a fast-time network (era 120 DAA, lead 20): the record's section 3 carries both runs. ## 4.5 Who evaluates, who verifies @@ -69,6 +80,8 @@ Every mining node evaluates both VDFs itself: one CPU core for 10 minutes each h There is no timelord role and no race: unlike Chia, the chain does not wait for the VDF; it uses a VDF output that was fixed 20 minutes (epoch) or 2 hours (era) earlier. "No node evaluates" means no miner is running a CPU, which means nobody is mining. +Implemented for the era (7 October 2026): every node evaluates (4.4 step 3) and holds the record; `EraVdfManager::submit` accepts a record from outside when its input is the one this node derives for the era, its scheme and T are the network's, its proof verifies and its output is the seed of the proof. What is still owed before era 1 of any network with the switch set (180 days after that network's genesis at the earliest): the P2P message type that gossips the record and serves it to a syncing peer, and the RPC that imports one; until then a node syncing across an era boundary evaluates the delay itself on its header processor's thread (4.4 step 3). + ## 4.6 T from a reference core rate, fixed at genesis Designed (`proto-vdf/README.md`, parameter recommendation). Before genesis, run `vdf bench` (or chiavdf's `vdf_bench`) on every devnet node type that will mine, take the fastest honest single-core NUDUPL rate observed as `r_ref` (squarings per second), and fix at genesis: @@ -80,6 +93,20 @@ Designed (`proto-vdf/README.md`, parameter recommendation). Before genesis, run Choosing the fastest honest core, not the median, keeps the stated 10 minutes an upper bound for honest nodes and leaves the attacker margin intact. T MUST NOT be derived from on-chain timing, which is manipulable. T is a genesis constant; hardware will get faster over the years and the margin will erode slowly from 300x, which a fixed T covers for decades, and the upgrade path of section 5.7 exists if it is ever needed. +**The era constants as set (7 October 2026, era VDF lane; `docs/analysis/era-vdf-2026-10-07.md` section 2).** The reference rate is the NODE's own evaluator (the fixed-width-integer class group of `kaspa_consensus_core::era_vdf`), not chiavdf's, because an honest node runs the node's code and must finish inside the lead: the two rules are "T from the honest evaluator's rate" and "the margin against the fastest prover anyone can run". Measured on one core of igneum-build-2 (AMD EPYC 9454P, nice 10, the box under load): + +| Constant | Value | Basis | +|---|---|---| +| `ERA_VDF_REFERENCE_SQUARINGS_PER_S` | 30,000 | the node's evaluator at 30,589 and 40,117 squarings/s in two runs; the lower run is the reference, so the hour is an upper bound at it | +| `T_era`, scheme 0 (`ERA_VDF_T_CLASS_GROUP`, `Params::era_vdf_t`) | 108,000,000 squarings | 3,600 x 30,000; 45 to 60 min on the box core, about 72 min on a 2019-class core (the F6 calibration), inside the 2-hour lead | +| `ERA_VDF_REFERENCE_HASHES_PER_S` | 16,000,000 | SHA-256 chain at 16.2 and 17.0 million/s (SHA-NI) | +| `T_era`, scheme 1 (`ERA_VDF_T_HASH_CHAIN`) | 57,600,000,000 hashes | 3,600 x 16,000,000 | +| Verify, scheme 0 | 21.9 to 22.6 ms with the group held; the discriminant derivation 161 to 167 ms once per era | the 10-ms gate is missed by 2.2x on the box core; the record's section 5 says what closes it (O-4.6's reducer, a limb-level NUDUPL, or GMP behind a feature on x86-64) | +| Prove, scheme 0 | about 14 percent of the evaluation single-threaded, parallel over residue classes | at T 401,167: eval 10.0 s, prove 1.6 s | +| The fastest prover measured | chiavdf's NUDUPL over GMP at 208.8 K squarings/s on the same core (its AVX-512 IFMA path was not established in this build) | the delay at that prover: 517 s, 517x the 1-s block interval and 259x the 2-s window; at a hardware prover 10x faster, 52 s, still 26x the window | + +The epoch constants (`T_epoch`) stay as this section designs them until the epoch path is implemented; a measured `T_epoch` would be 600 x the same reference rate, 18,000,000 squarings. + | Attacker evaluator speed vs reference | Epoch delay | Era delay | Beats the 2-s window | |---|---|---|---| | 1x | 600 s | 3,600 s | no, margin 300x | diff --git a/docs/spec/06-open-items.md b/docs/spec/06-open-items.md index 0da101da1..954a43288 100644 --- a/docs/spec/06-open-items.md +++ b/docs/spec/06-open-items.md @@ -77,7 +77,10 @@ An item closes when its measurement is in `docs/bench-log.md` or its decision is | O-4.5 | HashPrime byte layout (mirror chiavdf or not); carry D in the proof so the verifier skips the 17 ms prime search; compact form encoding before the wire format freezes | Decision, cryptographer | 3 | | O-4.6 | Reduction runs every squaring; chiavdf reduces only when `a` exceeds 8 limbs | Port; re-measure r_ref | 3 | | O-4.7 | No fuzzing of `deserialize` on hostile bytes beyond validity checks; no VDF rate measured on NVIDIA or AMD hosts' CPUs | Fuzz the deserializer; bench on the devnet hosts (same run as O-4.2) | 3 | -| O-4.8 | The era draw must take the VDF output as its only randomness (`proto-vdf/README.md` item 6) | Check against section 1.13.1 once O-1.11 is fixed | 1, with 3 | +| O-4.8 | The era draw must take the VDF output as its only randomness (`proto-vdf/README.md` item 6) | CLOSED 7 October 2026 (era VDF lane): the node hands the generator `E_n` alone (`EpochSeeds::era`), the draw's preimage is `"igneum-era/" || E_n`, nothing else; `E_n = SHA-256(tag || scheme || input || T || y)` (spec 4.4 step 4) | 1, with 3 | +| O-4.10 | The P2P relay of an era record (spec 4.5): the message type that gossips `(era, input, proof, E_n)` and serves it to a syncing peer, and the RPC import; until then a node syncing across an era boundary without the record evaluates the delay itself on its header processor's thread (4.4 step 3) | Owed before era 1 of any network with `era_vdf_activation_daa` set (180 days after that network's genesis at the earliest); the node lane, on top of `EraVdfManager::submit` | 3 | +| O-4.11 | Whether `C_era(n)` binds to the certified checkpoint (the design document's wording) or stays the chain block the cut names, certified or not (the O-4.3 reading the node implements, 4.4 step 1): the certified binding couples the era seed to finality liveness and needs a rule for a certificate that lands late (`docs/analysis/era-vdf-2026-10-07.md` section 4) | Decision, the project lead with the finality lane; one function (`EraVdfManager::cut_block`) either way | 3 | +| O-4.12 | The era VDF's activation per network (`era_vdf_activation_daa`, never everywhere today) and the scheme byte at genesis (0): the project lead's word per network; the fast-time gate ran at activation 0 | Decision, the project lead | 3 | | O-4.9 | Grinding model assumptions: advantage uniform on 0 to 15% per program (the review's measured range), top-quartile keep rule, one block burned per candidate | Re-run `vdf grind` with the advantage distribution from the O-1.3 census | 3 | ## 6.5 Section 5, fees and economics @@ -151,4 +154,6 @@ Section 3.11 states the finality guarantees with their assumptions and derives t Count after this addition: section 3 has 19 items (O-3.15 to O-3.19 added; O-3.6 narrowed to the devnet test), section 4 keeps 9 with O-4.3 decided and awaiting implementation; total 66. +Added 7 October 2026 (era VDF lane): O-4.8 closed, O-4.10 to O-4.12 added; section 4 has 12 items; total 69. + Update of 4 October 2026 (floor 2/3): O-3.15 decided and O-3.16 closed as text (both kept in the table with their resolution), O-3.18 and O-3.19 narrowed as stated in their rows. Section 3 keeps 17 open items. diff --git a/igneum-pow/src/accept.rs b/igneum-pow/src/accept.rs index 198871a28..5777be4b6 100644 --- a/igneum-pow/src/accept.rs +++ b/igneum-pow/src/accept.rs @@ -15,13 +15,31 @@ //! seed words 2 and 3 at its multiply-shift index, a second pure table beside the dataset stand-in (words 0 and 1). The census (section 7.3) checked on 100,000 programs that the //! closed-form verdict agrees with the memory-hard one on all but 39 threshold-edge cases. -use crate::generator::{Instr, Op, Program, INSTR_COUNT, ITERATIONS, LANES}; +use crate::generator::{Instr, LoadClass, Op, Program, ShadowClass, INSTR_COUNT, ITERATIONS, LANES, V4_CLASS, V4_SHADOW_INSTRS}; use crate::seed::{fnv1a64, SplitMix64}; use crate::memhard::hot_index; use crate::verify::{dataset_elem, fold_words, load_index, splitmix32, ScratchModel}; /// Units (32-lane warps) the dynamic test interprets. pub const ACCEPT_UNITS: usize = 64; + +/// Class v4 sub-version 3, rule (c''): the per-site distinct-index RATIO (AP-F8-1's low-entropy-band class, 7 October +/// 2026, the attack-pass gate's numbers through main), keyed on the class v4 shape. Over [`ACCEPT_UNITS_DISTINCT_V4`] +/// units (2^20 evaluations per site) the count of distinct dataset word indices a load site reads, against the +/// expectation of a uniform source on the site's window (N - N^2 / 2W), must reach [`MIN_DISTINCT_RATIO_V4`]. The +/// floor sits between the 55 clean F8 seeds' minimum over their site rows (0.9960; the clean p1 0.9990, the median +/// 1.0000) and the strong failing seeds' maximum (p56 0.9654; p23 0.8361, p18 0.9274, p19 0.9335, p15 0.9432), +/// 0.015 from each. The open tail: F8's p4, p8, p10 and p34 (1.22x to 1.50x on the gate) read 0.9927 to 0.9963 at +/// 2^20, inside the clean spread, and a 2^24 pass does not separate them either (p34 0.9181, p4 0.9614, p8 0.9630, +/// p10 0.9612 against the clean p44 0.9612, p52 0.9613, p3 0.9971, p2 and p5 1.0004); they stay unattributed and +/// chased in `docs/fud-ledger.md` AP-F8-1. A candidate under the floor is rejected and the next attempt drawn under +/// the 256 cap and the last resort. Measured on one box-2 core with the shadow executed: 2.8 s per chosen candidate. +pub const ACCEPT_UNITS_DISTINCT_V4: usize = 4096; +/// The ratio floor at 2^20. +pub const MIN_DISTINCT_RATIO_V4: f64 = 0.98; +/// Kept for the record and the driver, not wired: the most repeated source value per site over the (c) units' +/// 16,384 evaluations (a uniform site repeats a value 2 or 3 times; the finding's bands sit under the ratio instead). +pub const MAX_SOURCE_REPEAT_V4: u32 = 8; /// Hashes the dynamic test evaluates: 2,048. pub const ACCEPT_HASHES: usize = ACCEPT_UNITS * LANES; /// Domain tag of the base-nonce stream. @@ -57,6 +75,19 @@ pub enum Reject { LaneConstantSite { iteration: u8, instr: u8, unit: u8 }, /// (c): `count` final register values were 0 or all ones. Saturated { count: u32 }, + /// (a'), class v4 sub-version 2 (AP-F8-1): the load at `instr` reads `reg`, which is not fresh by dataflow in the + /// steady state of the loop (the freshness fixpoint over the base program and the shadow block). + UnfreshLoadSource { instr: u8, reg: u8 }, + /// (c'), class v4 sub-version 2 (AP-F8-1): the load at `site` read a source value of 0 or all ones in `count` of + /// its 16,384 evaluations (64 units x 32 lanes x 8 iterations); limit [`MAX_SATURATED`] - 1, the same 1 percent as (c). + SaturatedSource { site: u8, count: u32 }, + /// (c'') (B), class v4 sub-version 3: the load at `site` read the value `value` in `count` of its 16,384 (c) + /// evaluations (limit [`MAX_SOURCE_REPEAT_V4`] - 1): one constant upstream that the lineage rule cannot see. + RepeatedSource { site: u8, value: u32, count: u32 }, + /// (c''), class v4 sub-version 3: the load at `site` read `distinct` distinct dataset word indices over + /// `evaluations`, `ratio_milli` / 1000 of a uniform source on its window, under the floor: a low-entropy index band + /// (F8's p23, p18, p19, p15, p56). + LowEntropySite { site: u8, distinct: u32, evaluations: u32, ratio_milli: u32 }, /// (c): output bit `bit` was set in `ones` of 2,048 hashes. OutputBias { bit: u8, ones: u32 }, /// (c): the distinct-address sum was `sum`. @@ -75,6 +106,10 @@ impl std::fmt::Display for Reject { write!(f, "(c) load at iteration {iteration} instruction {instr} reads one address in all lanes of unit {unit}") } Reject::Saturated { count } => write!(f, "(c) {count} of 16384 final register values saturated (limit 163)"), + Reject::UnfreshLoadSource { instr, reg } => write!(f, "(a') load at {instr} reads r{reg}, not fresh by dataflow in the loop's steady state (class v4 sub-version 2)"), + Reject::RepeatedSource { site, value, count } => write!(f, "(c'') load site {site} read the value {value:#010x} in {count} of 16384 evaluations (limit {})", MAX_SOURCE_REPEAT_V4 - 1), + Reject::LowEntropySite { site, distinct, evaluations, ratio_milli } => write!(f, "(c'') load site {site} read {distinct} distinct word indices over {evaluations} evaluations, {}.{:03} of a uniform source on its window (floor {MIN_DISTINCT_RATIO_V4} at 2^20)", ratio_milli / 1000, ratio_milli % 1000), + Reject::SaturatedSource { site, count } => write!(f, "(c') load site {site} read a saturated source value in {count} of 16384 evaluations (limit 163)"), Reject::OutputBias { bit, ones } => write!(f, "(c) output bit {bit} set in {ones} of 2048 hashes"), Reject::DistinctAddresses { sum } => { write!(f, "(c) distinct dataset addresses {sum} over 2048 hashes (mean {:.2}, needs above 120 of 128 of the dataset loads)", *sum as f64 / 2048.0) @@ -136,28 +171,170 @@ fn check_injecting_writes(instrs: &[Instr]) -> Result<(), Reject> { Ok(()) } -/// Parts (a) and (b). +/// The most repeated value of `values` (sorted in place) and that value: (B), kept for the driver, not wired. +#[allow(dead_code)] +fn most_repeated(values: &mut [u32]) -> (u32, u32) { + values.sort_unstable(); + let (mut best, mut best_v, mut run) = (0u32, 0u32, 0u32); + for i in 0..values.len() { + run = if i > 0 && values[i] == values[i - 1] { run + 1 } else { 1 }; + if run > best { + best = run; + best_v = values[i]; + } + } + (best, best_v) +} + +/// (c''), class v4 sub-version 3: the 2^20 ratio pass on the chosen candidate (the constants above). +pub fn check_distinct_indices_v4(p: &Program) -> Result<(), Reject> { + distinct_ratio_pass(p, ACCEPT_UNITS_DISTINCT_V4, MIN_DISTINCT_RATIO_V4).map(|_| ()) +} + +/// One ratio pass over `units`: every load site's distinct word indices against the uniform expectation on its +/// window (`N - N^2 / 2W`, the window `2^28 >> min(win, 2)` words of the closed-form dataset), `Err` at the first +/// site under `floor`, else the minimum ratio and its site. +pub fn distinct_ratio_pass(p: &Program, units: usize, floor: f64) -> Result<(f64, usize), Reject> { + let n = (units * LANES * ITERATIONS) as f64; + let d = distinct_indices_v4(p, units)?; + let mut min = (f64::MAX, 0usize); + let mut site = 0usize; + for i in &p.instrs { + if !i.op.is_load() { + continue; + } + let wsize = ((1u64 << ACCEPT_DATASET_LOG2) >> (i.win as u64).min(2)) as f64; + let ratio = d[site] as f64 / (n - n * n / (2.0 * wsize)); + if ratio < floor { + return Err(Reject::LowEntropySite { site: site as u8, distinct: d[site], evaluations: n as u32, ratio_milli: (ratio * 1000.0) as u32 }); + } + if ratio < min.0 { + min = (ratio, site); + } + site += 1; + } + Ok(min) +} + +/// The distinct dataset word indices every load site reads over `units` units of the seed's acceptance stream on +/// the closed-form words (the sample caps the count near `units x 32 x 8`, so a site's index entropy is read only +/// below about log2 of that). +pub fn distinct_indices_v4(p: &Program, units: usize) -> Result, Reject> { + let loads = p.loads_per_hash(); + let sites = loads / ITERATIONS; + let mut acc = Acc { + sources: None, + indices: Some(vec![Vec::with_capacity(units * LANES * ITERATIONS); sites]), + sat_source: vec![0; sites], + and_acc: [u32::MAX; 8], + or_acc: [0; 8], + saturated: 0, + bit_ones: [0; 64], + distinct_sum: 0, + }; + let mut lane_addrs = vec![0u32; LANES * loads]; + for (unit, &base) in accept_base_nonces_n(&p.seed, units).iter().enumerate() { + run_unit(p, unit, base, &mut acc, &mut lane_addrs)?; + } + let mut out = Vec::with_capacity(sites); + for ix in acc.indices.take().unwrap().iter_mut() { + ix.sort_unstable(); + ix.dedup(); + out.push(ix.len() as u32); + } + Ok(out) +} + +/// Whether `class` is the class v4 shape (the 256-instruction shadow block over the class v3 base, the pass count and +/// the era set aside): the shape the sub-version 2 rules (a') and (c') apply to, on every draw path. +pub fn is_class_v4_shape(class: &LoadClass) -> bool { + matches!(class.shadow, Some(ShadowClass { instrs: V4_SHADOW_INSTRS, .. })) + && LoadClass { era: None, shadow: None, ..*class } == LoadClass { shadow: None, ..V4_CLASS } +} + +/// One pass of the dataflow freshness over the base program then the shadow block (the order of one iteration), +/// from `fresh`; `check` reports the first load that reads a register that is not fresh. The rule (AP-F8-1, +/// `docs/analysis/ca3-v4-uniform.md`): a load leaves its destination fresh only if its source was (a saturated +/// source reads one fixed word); add, sub, xor, mad and shfl if either operand was; rotl and rotr if the operand +/// was (a rotate maps all-ones and zero to themselves); or, mul and mulhi never. +fn freshness_pass(p: &Program, fresh: &mut [bool; 8], pair_op: &mut [Option<(Op, usize)>; 8], check: bool) -> Result<(), Reject> { + for (k, i) in p.instrs.iter().chain(p.shadow.iter()).enumerate() { + let (d, a) = (i.dst as usize, i.src as usize); + if check && i.op.is_load() && !fresh[a] { + return Err(Reject::UnfreshLoadSource { instr: k as u8, reg: i.src }); + } + // the shared-operand idiom (sub-version 3): or-then-xor or or-then-sub on one operand is `d & ~s`, xor-then-or + // is `d | s`: lossy, though the second op would inject on its own (F8's p23: `or r6 |= r4; xor r6 ^= r4`) + let masked = matches!((pair_op[d], i.op), (Some((Op::Or, s)), Op::Xor) | (Some((Op::Or, s)), Op::Sub) | (Some((Op::Xor, s)), Op::Or) if s == a); + fresh[d] = !masked + && match i.op { + Op::Load | Op::WLoad | Op::Scratch | Op::Hot => fresh[a], + Op::Add | Op::Sub | Op::Xor | Op::Mad | Op::Shfl => fresh[d] || fresh[a], + Op::Rotl | Op::Rotr => fresh[d], + Op::Or | Op::Mul | Op::MulHi => false, + }; + pair_op[d] = if matches!(i.op, Op::Or | Op::Xor) && !masked { Some((i.op, a)) } else { None }; + for r in 0..8 { + if r != d { + if let Some((_, s)) = pair_op[r] { + if s == d { + pair_op[r] = None; + } + } + } + } + } + Ok(()) +} + +/// Part (a'), class v4 sub-version 2: every load's source is fresh by dataflow in the loop's steady state. The draw +/// of `candidate_from_words_class` keeps in-pass sources fresh; this closes the iteration boundary (a source last +/// written late in the previous iteration or in the shadow block, which the draw's no-eligible fallback can pick: +/// F8's p11, an `or` at 63 feeding a load at 1). The state starts all fresh (the init words are a per-lane hash of +/// the nonce) and is run to its fixpoint (it only ever falls, so at most 8 passes change it), then one checking pass. +pub fn check_fresh_sources_v4(p: &Program) -> Result<(), Reject> { + if !is_class_v4_shape(&p.class) { + return Ok(()); + } + let mut fresh = [true; 8]; + let mut pair_op: [Option<(Op, usize)>; 8] = [None; 8]; + for _ in 0..9 { + let before = (fresh, pair_op); + freshness_pass(p, &mut fresh, &mut pair_op, false)?; + if (fresh, pair_op) == before { + break; + } + } + freshness_pass(p, &mut fresh, &mut pair_op, true) +} + +/// Parts (a), (b) and, for class v4 sub-version 2, (a'). pub fn check_static(p: &Program) -> Result<(), Reject> { if p.instrs.len() != INSTR_COUNT { panic!("acceptance needs a {INSTR_COUNT}-instruction program"); } check_stale_loads(&p.instrs)?; - check_injecting_writes(&p.instrs) + check_injecting_writes(&p.instrs)?; + check_fresh_sources_v4(p) } /// The 64 base nonces of the dynamic test for seed words `seed`. pub fn accept_base_nonces(seed: &[u32; 8]) -> [u32; ACCEPT_UNITS] { + let v = accept_base_nonces_n(seed, ACCEPT_UNITS); + let mut out = [0u32; ACCEPT_UNITS]; + out.copy_from_slice(&v); + out +} + +/// The first `n` base nonces of the seed's acceptance stream (the (c) units are the first [`ACCEPT_UNITS`]). +pub fn accept_base_nonces_n(seed: &[u32; 8], n: usize) -> Vec { let mut b = Vec::with_capacity(ACCEPT_TAG.len() + 32); b.extend_from_slice(ACCEPT_TAG); for w in seed { b.extend_from_slice(&w.to_le_bytes()); } let mut rng = SplitMix64::new(fnv1a64(&b)); - let mut out = [0u32; ACCEPT_UNITS]; - for o in out.iter_mut() { - *o = (rng.next() as u32) & !31; - } - out + (0..n).map(|_| (rng.next() as u32) & !31).collect() } #[inline(always)] @@ -167,6 +344,13 @@ fn mulhi32(a: u32, b: u32) -> u32 { /// Accumulators of the dynamic test over the 64 units. struct Acc { + /// (c'') (B): every load's source value per site, recorded when present. + sources: Option>>, + /// (c'') (A): every load's dataset index per site, recorded when present (the distinct-index pass only). + indices: Option>>, + /// (c'): per load site (the load's index within the iteration), how many of its evaluations read a source value + /// of 0 or all ones (class v4 sub-version 2; counted for every class, judged for class v4 only). + sat_source: Vec, and_acc: [u32; 8], or_acc: [u32; 8], saturated: u32, @@ -198,9 +382,15 @@ fn run_unit(p: &Program, unit: usize, base: u32, acc: &mut Acc, lane_addrs: &mut let mut scratch = if p.has_scratch() { Some(ScratchModel::new(p.class.scratch_slots_per_lane())) } else { None }; let slot_mask = p.class.scratch_slot_mask(); let era = p.class.era; + // Class v4 sub-version 3 (AP-F8-3, 7 October 2026): the acceptance interpreter runs the latency-shadow block + // after instruction 63 of every iteration, `reps` times with the iteration's `sel`, exactly as the hash does + // (verify.rs). Until this commit it ran the 64 base instructions only, so every dynamic test (c) judged a class v4 + // program the chain never hashes. The shadow block holds no load, so its instructions take the same arms. + let shadow_reps = p.shadow_reps(); for it in 0..ITERATIONS { let sel = r[0]; - for (k, ins) in p.instrs.iter().enumerate() { + let shadow_pass = (0..shadow_reps).flat_map(|_| p.shadow.iter().enumerate().map(|(k, i)| (INSTR_COUNT + k, i))); + for (k, ins) in p.instrs.iter().enumerate().chain(shadow_pass) { let d = ins.dst as usize; let a = ins.src as usize; match ins.op { @@ -289,8 +479,17 @@ fn run_unit(p: &Program, unit: usize, base: u32, acc: &mut Acc, lane_addrs: &mut // word (verify::fold_words); width 1 is the lottery hash's xor of one word. let width = ins.width as usize; let align = !(ins.width as u32 - 1); + let site = nload % (loads / ITERATIONS); for lane in 0..LANES { - idx[lane] = load_index(era.as_ref(), ins, r[a][lane], mask, ACCEPT_DATASET_LOG2) & align; + let v = r[a][lane]; + acc.sat_source[site] += (v == 0 || v == u32::MAX) as u32; + if let Some(src) = acc.sources.as_mut() { + src[site].push(v); + } + idx[lane] = load_index(era.as_ref(), ins, v, mask, ACCEPT_DATASET_LOG2) & align; + if let Some(ix) = acc.indices.as_mut() { + ix[site].push(idx[lane]); + } } if idx.iter().all(|&x| x == idx[0]) { return Err(Reject::LaneConstantSite { iteration: it as u8, instr: k as u8, unit: unit as u8 }); @@ -368,7 +567,18 @@ fn run_unit(p: &Program, unit: usize, base: u32, acc: &mut Acc, lane_addrs: &mut /// Part (c). pub fn check_dynamic(p: &Program) -> Result { let loads = p.loads_per_hash(); - let mut acc = Acc { and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + let v4 = is_class_v4_shape(&p.class); + let sites = loads / ITERATIONS; + let mut acc = Acc { + sources: None, + indices: None, + sat_source: vec![0; sites], + and_acc: [u32::MAX; 8], + or_acc: [0; 8], + saturated: 0, + bit_ones: [0; 64], + distinct_sum: 0, + }; let mut lane_addrs = vec![0u32; LANES * loads]; for (unit, &base) in accept_base_nonces(&p.seed).iter().enumerate() { run_unit(p, unit, base, &mut acc, &mut lane_addrs)?; @@ -382,6 +592,17 @@ pub fn check_dynamic(p: &Program) -> Result { if acc.saturated >= MAX_SATURATED { return Err(Reject::Saturated { count: acc.saturated }); } + // (c'), class v4 sub-version 2 (AP-F8-1, 7 October 2026): a load whose source is saturated reads one fixed word, + // whatever delivered the saturation (an or-written value, a rotate of one, a load after a saturated load); the + // source rule of the draw removes the writers it can see and this count catches every delivery. Keyed on the + // class v4 shape as the draw's rule is, so v2 and v3 verdicts do not move. + if v4 { + if let Some((site, &count)) = acc.sat_source.iter().enumerate().find(|(_, &c)| c >= MAX_SATURATED) { + return Err(Reject::SaturatedSource { site: site as u8, count }); + } + // (c''), the ratio on the candidate that passed everything else (the draw's last and dearest test) + check_distinct_indices_v4(p)?; + } let half = (ACCEPT_HASHES / 2) as u32; let mut bias_max = 0u32; for (bit, &ones) in acc.bit_ones.iter().enumerate() { @@ -435,7 +656,7 @@ mod tests { let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2); let bases = accept_base_nonces(&p.seed); let loads = p.loads_per_hash(); - let mut acc = Acc { and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; let mut la = vec![0u32; LANES * loads]; let mut ones = [0u32; 64]; for (u, &b) in bases.iter().enumerate() { @@ -450,6 +671,49 @@ mod tests { } } + /// AP-F8-3 (7 October 2026): the acceptance's execution and `verify.rs` agree on a class v4 program WITH its + /// shadow block (the output bit counts over the 64 units on the closed-form dataset, the same sel per iteration), + /// so the two paths cannot diverge again: until sub-version 3 the acceptance ran the base program only and judged + /// a program the chain never hashes. The devnet epoch-0 seed and the six test eras, 8 x 256 x 27 shadow + /// instructions per hash each; the same program with its shadow stripped gives other counts. + #[test] + fn acceptance_executes_the_shadow_block_as_the_verifier_does() { + use crate::generator::{generate_era, EraParams, V3_ALLOWED, V4_CLASS}; + let hx = |h: &str| -> Vec { (0..h.len()).step_by(2).map(|i| u8::from_str_radix(&h[i..i + 2], 16).unwrap()).collect() }; + let g = hx("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"); + let mut eras = vec![g.clone()]; + for n in 0..6 { + eras.push(EraParams::test_era_bytes(&format!("igneum-era-test/{n}")).to_vec()); + } + for era in &eras { + let p = generate_era("igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", &g, V4_CLASS, era, &V3_ALLOWED); + assert_eq!(p.shadow.len(), 256); + assert_eq!(p.shadow_reps(), 27); + let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2); + let bases = accept_base_nonces(&p.seed); + let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + let mut la = vec![0u32; LANES * p.loads_per_hash()]; + let mut ones = [0u32; 64]; + for (u, &b) in bases.iter().enumerate() { + run_unit(&p, u, b, &mut acc, &mut la).unwrap(); + for h in crate::verify::hash_warp(&p, b, &ds) { + for j in 0..64 { + ones[j] += ((h >> j) & 1) as u32; + } + } + } + assert_eq!(acc.bit_ones, ones, "the acceptance's execution of a class v4 program (shadow block included) matches the verifier's hashes"); + // and the same program with its shadow stripped hashes differently: the shadow is executed, not skipped + let mut bare = p.clone(); + bare.shadow.clear(); + let mut acc2 = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + for (u, &b) in bases.iter().enumerate() { + let _ = run_unit(&bare, u, b, &mut acc2, &mut la); + } + assert_ne!(acc.bit_ones, acc2.bit_ones, "the shadow block changes the acceptance's execution"); + } + } + /// The instrumented interpreter agrees with `verify.rs` on the closed-form dataset keyed by the seed words. #[test] fn instrumented_interpreter_matches_verify() { @@ -458,7 +722,7 @@ mod tests { let p = candidate(&s, s.as_bytes(), 0); let ds = DatasetSource::from_key(p.seed, DatasetMode::ClosedForm, ACCEPT_DATASET_LOG2); let bases = accept_base_nonces(&p.seed); - let mut acc = Acc { and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; let mut la = vec![0u32; LANES * p.loads_per_hash()]; let mut ones = [0u32; 64]; let mut any = false; @@ -501,7 +765,7 @@ mod tests { let p = generate_class("igneum-genesis", LoadClass::hot(96, 4)); let words = p.hot_words(); let loads = p.loads_per_hash(); - let mut acc = Acc { and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; + let mut acc = Acc { sources: None, indices: None, sat_source: vec![0; 64], and_acc: [u32::MAX; 8], or_acc: [0; 8], saturated: 0, bit_ones: [0; 64], distinct_sum: 0 }; let mut la = vec![0u32; LANES * loads]; let mut buckets = [0u64; 16]; let mut hot_count = 0u64; diff --git a/igneum-pow/src/emit.rs b/igneum-pow/src/emit.rs index 37437fe37..8d93a59a3 100644 --- a/igneum-pow/src/emit.rs +++ b/igneum-pow/src/emit.rs @@ -9,7 +9,7 @@ //! One deliberate difference from the Swift: `program_json` writes the cache line mask inside the `"item"` string //! as a bare `0x003fffff`. The Swift writes it quoted (`jhex`), which is not valid JSON. -use crate::generator::{EraParams, Instr, Op, Program, ProgramClass, GENERATOR_VERSION, INSTR_COUNT, ITERATIONS, LOAD_SLOTS}; +use crate::generator::{EraParams, Instr, Op, Program, ProgramClass, GENERATOR_VERSION, INSTR_COUNT, ITERATIONS, LOAD_SLOTS, PROGRAM_SUBVERSION_V4}; use crate::derive::{instr_line as derive_instr_line, instr_text as derive_instr_text, DERIVE_PROGRAMS}; use crate::memhard::{ hot_key, hot_segments, hot_words, Layout, MixParams, Shape, CACHE_LINES_PER_SEGMENT, CACHE_SEGMENT_LOG2_LINES, CACHE_TAG, @@ -173,6 +173,10 @@ fn program_class_header_lines(p: &Program) -> String { s.push_str("// runs another class refuses this pack, and a job line names the class it wants (class=v3 era=).\n"); } s.push_str(&format!("#define IGNEUM_PROGRAM_CLASS {}\n", jstr(p.program_class().name()))); + if p.program_class() == ProgramClass::V4 { + // the class v4 stream sub-version (AP-F8-1 amendment): a worker ignores it, packcheck requires it + s.push_str(&format!("#define IGNEUM_PROGRAM_SUBVERSION {}\n", PROGRAM_SUBVERSION_V4)); + } if let Some(era) = &p.era_bytes { s.push_str(&format!("#define IGNEUM_ERA_SEED_HEX {}\n", jstr(&hex_bytes(era)))); } @@ -1825,6 +1829,9 @@ pub fn program_json(p: &Program, day: &str, ds: &DatasetSource) -> String { s.push_str(&format!(" \"loads_per_hash\": {},\n", p.loads_per_hash())); if p.program_class() != ProgramClass::V2 { s.push_str(&format!(" \"program_class\": {},\n", jstr(p.program_class().name()))); + if p.program_class() == ProgramClass::V4 { + s.push_str(&format!(" \"sub_version\": {},\n", PROGRAM_SUBVERSION_V4)); + } if let Some(era) = &p.era_bytes { s.push_str(&format!(" \"era_seed_bytes\": {},\n", jstr(&hex_bytes(era)))); } diff --git a/igneum-pow/src/generator.rs b/igneum-pow/src/generator.rs index 8bbc72c9f..9c2ebe05a 100644 --- a/igneum-pow/src/generator.rs +++ b/igneum-pow/src/generator.rs @@ -54,6 +54,18 @@ pub const LOAD_SLOTS: usize = 16; /// Attempts before an implementation may treat the seed as a consensus fault (spec 01 section 1.4.6). At the /// measured 5.14 percent rejection rate the chance of 32 consecutive rejections is below 2^-136. pub const MAX_ATTEMPTS: u32 = 32; + +/// The attempt cap of class v4 sub-version 2 (AP-F8-2, 7 October 2026): rules (a') and (c') reject about two thirds of +/// candidates, so 32 attempts exhaust with probability about (2/3)^32, 2e-6 per epoch seed, one epoch no node could +/// draw every few decades at one epoch an hour (seen at chain-shaped seed igneum-f9/331672). At 256 attempts the +/// exhaustion probability is (2/3)^256, under 1e-45; the cost of a rejected attempt is one draw and the 64-unit check, +/// about 2 ms on one core, so the worst case is half a second. Keyed on the class v4 shape, so v2 and v3 keep 32. +pub const MAX_ATTEMPTS_V4: u32 = 256; + +/// The attempt cap of a class: [`MAX_ATTEMPTS_V4`] for the class v4 shape, [`MAX_ATTEMPTS`] otherwise. +pub fn max_attempts_for(class: &LoadClass) -> u32 { + if crate::accept::is_class_v4_shape(class) { MAX_ATTEMPTS_V4 } else { MAX_ATTEMPTS } +} /// Domain tag of the program id. pub const PROGRAM_ID_TAG: &[u8] = b"igneum-program/"; @@ -1076,16 +1088,31 @@ impl Program { } pub fn program_id(generator: u32, seed: &[u32; 8], attempt: u32) -> u64 { - let mut b = Vec::with_capacity(PROGRAM_ID_TAG.len() + 4 + 32 + 4); + let mut b = Vec::with_capacity(PROGRAM_ID_TAG.len() + 4 + 32 + 4 + 6); b.extend_from_slice(PROGRAM_ID_TAG); b.extend_from_slice(&generator.to_le_bytes()); for w in seed { b.extend_from_slice(&w.to_le_bytes()); } b.extend_from_slice(&attempt.to_le_bytes()); + if generator == GENERATOR_VERSION_V4 { + // The class v4 sub-version (AP-F8-1 amendment, 7 October 2026): `"sub/" || sub_version as little-endian u16` + // appended for generator 4 only, so a binary from before the load-source rule (sub-version 0, no suffix) and + // one after it never share a program id for one seed; the node's id check then catches a split. v2 and v3 + // ids are byte-identical. The node reads the sub-version from [`PROGRAM_SUBVERSION_V4`]; packs carry it as + // IGNEUM_PROGRAM_SUBVERSION and program.json "sub_version". + b.extend_from_slice(b"sub/"); + b.extend_from_slice(&PROGRAM_SUBVERSION_V4.to_le_bytes()); + } fnv1a64(&b) } +/// The sub-version of class v4's program stream, in every generator-4 program id and pack (AP-F8-3: 3 = the +/// acceptance executing the shadow block as the hash does, so its verdicts judge the program the chain hashes; +/// 2 = the dataflow load-source rule and the saturated-source check (c'), never shipped; 1 = the one-writer rule, +/// the stream 0.3.20 and 0.3.21 ship as object byte 5; 0 was the stream of 6 October 2026, never stamped). +pub const PROGRAM_SUBVERSION_V4: u16 = 3; + /// Domain tag of the program id of a read-width class (never collides with [`PROGRAM_ID_TAG`]). pub const PROGRAM_ID_TAG_RW: &[u8] = b"igneum-program-rw/"; @@ -1224,7 +1251,26 @@ pub fn candidate_from_words_class( is_hot[slot as usize] = true; } // (2) The instructions. `fresh[r]`: r was written by an earlier instruction and no load has read it since. + // Class v4's load-source rule (AP-F8-1, 7 October 2026, `docs/analysis/ca3-v4-uniform.md`; sub-version 2): + // a load's source is drawn only from registers that are FRESH by dataflow. Fresh at the program start (the init + // words are a per-lane hash of the nonce); after an op, the destination is fresh when: a load's source was fresh + // (a saturated source reads one fixed word and leaves a constant); add, sub, xor, mad or shfl had a fresh operand + // (dst or src); rotl or rotr rotated a fresh value (a rotate maps all-ones to all-ones); never after or, mul or + // mulhi (an or-written value is all-ones with probability (3/4)^32 per read, the 153x item of the finding; mul + // zeroes low bits; mulhi is dense near zero). Sub-version 1 looked one writer back and counted every load and + // rotate as fresh, which let an or-saturated value through a rotate or a load-after-load chain (F8's p6, p31). + // Keyed on the class v4 shape (the 256-instruction shadow block over the class v3 base, the pass count and the + // era set aside) on EVERY draw path, era or not, so a census through candidate_class reads the same stream as + // the chain; v2, v3 and every other class take no part. The draw order and the stream are otherwise the same. + let source_rule_v4 = matches!(class.shadow, Some(ShadowClass { instrs: V4_SHADOW_INSTRS, .. })) + && LoadClass { era: None, shadow: None, ..class } == LoadClass { shadow: None, ..V4_CLASS }; let mut fresh = [false; 8]; + let mut fresh_value = [true; 8]; + // the shared-operand idiom (AP-F8-1, sub-version 3): after `or d |= s`, a later `xor d ^= s` or `sub d -= s` with + // s unwritten since is `d & ~s`; after `xor d ^= s`, a later `or d |= s` is `d | s`: lossy either way, though + // the second op would count as injecting on its own. `pair_op[d]` holds the (op, s) of the last or/xor on d + // while neither d nor s has been written since. + let mut pair_op: [Option<(Op, usize)>; 8] = [None; 8]; let mut instrs = Vec::with_capacity(INSTR_COUNT); for k in 0..INSTR_COUNT { let mut roll = rng.below(75); @@ -1250,7 +1296,7 @@ pub fn candidate_from_words_class( let mut eligible = [0u64; 8]; let mut n = 0usize; for r in 0..8u64 { - if r != dst && fresh[r as usize] { + if r != dst && fresh[r as usize] && (!source_rule_v4 || fresh_value[r as usize]) { eligible[n] = r; n += 1; } @@ -1298,6 +1344,26 @@ pub fn candidate_from_words_class( fresh[src as usize] = false; } fresh[dst as usize] = true; + let (d, a) = (dst as usize, src as usize); + let masked = matches!((pair_op[d], op), (Some((Op::Or, s)), Op::Xor) | (Some((Op::Or, s)), Op::Sub) | (Some((Op::Xor, s)), Op::Or) if s == a); + fresh_value[d] = !masked + && match op { + Op::Load | Op::WLoad | Op::Scratch | Op::Hot => fresh_value[a], + Op::Add | Op::Sub | Op::Xor | Op::Mad | Op::Shfl => fresh_value[d] || fresh_value[a], + Op::Rotl | Op::Rotr => fresh_value[d], + Op::Or | Op::Mul | Op::MulHi => false, + }; + // a write to d sets or clears d's pair; a write to any register clears every pair that names it as operand + pair_op[d] = if matches!(op, Op::Or | Op::Xor) && !masked { Some((op, a)) } else { None }; + for r in 0..8 { + if r != d { + if let Some((_, s)) = pair_op[r] { + if s == d { + pair_op[r] = None; + } + } + } + } instrs.push(Instr { op, dst: dst as u8, src: src as u8, src2: b as u8, imm, imm2, rot, bit: bit as u8, mask, width, win, off }); } // (3) The latency-shadow block (Counter ASIC 3.0 item 8): drawn after the base program from the same stream, so @@ -1384,14 +1450,38 @@ pub fn try_generate_from_seed_bytes(seed_string: &str, seed_bytes: &[u8]) -> Res /// [`try_generate_from_seed_bytes`] for a load class. pub fn try_generate_class(seed_string: &str, seed_bytes: &[u8], class: LoadClass) -> Result { let mut last = None; - for attempt in 0..MAX_ATTEMPTS { + let cap = max_attempts_for(&class); + for attempt in 0..cap { let p = candidate_class(seed_string, seed_bytes, attempt, class); match check(&p) { Ok(_) => return Ok(p), Err(r) => last = Some(r), } } - Err(Exhausted { seed_string: seed_string.to_string(), attempts: MAX_ATTEMPTS, last: last.unwrap() }) + if crate::accept::is_class_v4_shape(&class) { + // AP-F8-2 (7 October 2026, main's ruling: the draw is total and no consensus path panics): a class v4 seed that + // exhausts its attempts takes the last-resort program, deterministic and accepted as drawn + return Ok(last_resort_v4(candidate_class(seed_string, seed_bytes, cap, class))); + } + Err(Exhausted { seed_string: seed_string.to_string(), attempts: cap, last: last.unwrap() }) +} + +/// The last-resort program of a class v4 seed whose [`MAX_ATTEMPTS_V4`] candidates were all rejected (AP-F8-2): +/// the candidate at attempt [`MAX_ATTEMPTS_V4`] with every `or`, `mul` and `mulhi` of its base program and its shadow +/// block rewritten to `xor` (dst, src and the other fields kept). With no lossy op left every register stays fresh by dataflow from the +/// init words on, so rule (a') holds by construction; the program is the seed's consensus program as drawn, with no +/// further check, so the draw is total. It is reached with probability about (2/3)^256 per epoch seed (the measured +/// (a') plus (c') rejection rate of about two thirds per attempt), under 1e-45: the chain never sees it, and a test +/// walks it on real rejected candidates so the path is known to run. +pub fn last_resort_v4(mut p: Program) -> Program { + // the shadow block runs at the end of every iteration and its own lossy ops feed the next iteration's loads + // (rule (a') walks base then shadow to its fixpoint), so both are rewritten + for i in p.instrs.iter_mut().chain(p.shadow.iter_mut()) { + if matches!(i.op, Op::Or | Op::Mul | Op::MulHi) { + i.op = Op::Xor; + } + } + p } /// [`try_generate_from_seed_bytes`], treating exhaustion as the consensus fault it is. @@ -1785,9 +1875,188 @@ mod tests { } /// Counter ASIC 3.0 (6 October 2026): class v4 is class v3 with the latency-shadow block `sh256x27`, drawn after - /// the base program, so a v4 program's base instructions, attempt and era draw are the v3 program's of the same - /// seed and era, draw for draw; its generator is 4, its id `program_id(4, seed, attempt)`, its era recorded; + /// the base program; since the AP-F8-1 amendment (7 October 2026) its base program draws a load's source only + /// from registers whose last writer keeps entropy, so it is its own stream over class v3's load slots and era + /// draw; its generator is 4, its id `program_id(4, seed, attempt)` with the sub-version suffix, its era recorded; /// v2 and v3 are untouched. + /// Every load's source fresh by dataflow in the loop's steady state: the crate's own rule (a') of `accept.rs`. + fn every_load_source_fresh(p: &Program) -> bool { + crate::accept::check_fresh_sources_v4(p).is_ok() + } + + /// Class v4 sub-version 3, rule (c''): the distinct-index ratio refuses F8's low-entropy band on the chain's own + /// candidates (the first attempt of each strong seed past (a), (b), (c) and (c') fails the 2^20 pass), and the + /// shared-operand rule removes p23's value constant at the draw: the chain's attempt 1 (id d65122675f16a1c7) draws + /// site 7 from r5 and passes; the same program with that source put back to r6 (`or r6 |= r4; xor r6 ^= r4` + /// upstream) is refused by the static rule and, run anyway, by the ratio. + #[test] + fn class_v4_distinct_ratio_rejects_the_low_entropy_band() { + use crate::accept::{check_dynamic, check_static, Reject}; + use crate::seed::seed_words_from_bytes; + let w = |s: String| -> Vec { seed_words_from_bytes(s.as_bytes()).iter().flat_map(|x| x.to_le_bytes()).collect() }; + let f8 = |k: u32| (w(format!("igneum-attack-f8/program/{k}")), w(format!("igneum-attack-f8/era/{k}"))); + let candidate = |epoch: &[u8], era: &[u8], attempt: u32| { + let label = format!("igneum-epoch/{}", epoch.iter().map(|b| format!("{b:02x}")).collect::()); + let mut p = candidate_class(&label, epoch, attempt, LoadClass::era(V4_CLASS, era, &V3_ALLOWED)); + p.generator = GENERATOR_VERSION_V4; + p.era_bytes = Some(era.to_vec()); + p + }; + for k in [15u32, 18, 19, 56] { + let (epoch, era) = f8(k); + let mut seen = None; + for attempt in 0..MAX_ATTEMPTS_V4 { + let p = candidate(&epoch, &era, attempt); + let t0 = std::time::Instant::now(); + match check_static(&p).and_then(|_| check_dynamic(&p).map(|_| ())) { + Err(Reject::LowEntropySite { site, distinct, evaluations, ratio_milli }) => { + println!("p{k} attempt {attempt} id {:016x}: (c'') site {site} read {distinct} distinct over {evaluations}, ratio {}.{:03}, {:.1} s", p.program_id(), ratio_milli / 1000, ratio_milli % 1000, t0.elapsed().as_secs_f64()); + seen = Some(attempt); + break; + } + Err(_) => continue, + Ok(()) => break, + } + } + assert!(seen.is_some(), "p{k}: the chain reaches a candidate only the ratio refuses"); + } + let (epoch, era) = f8(23); + let p = candidate(&epoch, &era, 1); + assert_eq!(p.program_id(), 0xd65122675f16a1c7); + let site7 = p.instrs.iter().enumerate().filter(|(_, i)| i.op.is_load()).nth(7).map(|(k, _)| k).unwrap(); + println!("p23 attempt 1: site 7 is instruction {site7}, source r{}", p.instrs[site7].src); + assert_eq!(p.instrs[site7].src, 5, "the shared-operand rule moved site 7 off r6"); + assert!(check_static(&p).is_ok(), "p23 attempt 1 passes the static rule"); + let t0 = std::time::Instant::now(); + let v = check_dynamic(&p).map(|_| ()); + println!("p23 attempt 1 dynamic: {:?} in {:.1} s", v.as_ref().err().map(|x| x.to_string()), t0.elapsed().as_secs_f64()); + assert!(v.is_ok(), "p23 attempt 1 passes the dynamic rule"); + let mut q = p.clone(); + q.instrs[site7].src = 6; + assert!(matches!(check_static(&q), Err(Reject::UnfreshLoadSource { .. })), "the value constant's load is refused by the static rule"); + let v = check_dynamic(&q).map(|_| ()); + println!("p23 attempt 1 with site 7 from r6: {:?}", v.as_ref().err().map(|x| x.to_string())); + assert!(matches!(v, Err(Reject::LowEntropySite { .. })), "and by the ratio when run"); + } + + /// Diagnostic (AP-F8-1, p23): the distinct word indices per site on the closed-form words at 2^20 and 2^24 + /// evaluations, for the program F8 measured (attempt 1, id d64dbc675f13be9e): site 7 (instruction 38) reads + /// r6 = (mulhi(..) | r4) ^ r4 = r6 & ~r4, an andnot idiom the lineage rule counts as fresh. + #[test] + #[ignore] + fn diag_p23_distinct_indices_per_site() { + let hx = |h: &str| -> Vec { (0..h.len()).step_by(2).map(|i| u8::from_str_radix(&h[i..i + 2], 16).unwrap()).collect() }; + let e = hx("01aa1485fcb5d59223ca40602086e618277decf440188c5a55898f635f7be34f"); + let r = hx("00951c99e7ef952fd52611b8de7c07cc705cdec9e129a31a19d696c99909f052"); + let mut p = candidate_class("igneum-epoch/01aa1485fcb5d59223ca40602086e618277decf440188c5a55898f635f7be34f", &e, 1, LoadClass::era(V4_CLASS, &r, &V3_ALLOWED)); + p.generator = GENERATOR_VERSION_V4; + p.era_bytes = Some(r.clone()); + assert_eq!(p.program_id(), 0xd64dbc675f13be9e); + for units in [4096usize, 65536] { + let t0 = std::time::Instant::now(); + let d = crate::accept::distinct_indices_v4(&p, units).unwrap(); + println!("p23 d64dbc675f13be9e at {} evaluations per site ({:.1} s): distinct word indices per site {:?}; site 7 = {} (log2 {:.1})", units * 32 * 8, t0.elapsed().as_secs_f64(), d, d[7], (d[7] as f64).log2()); + } + } + + /// The threshold measurement for the second sub-version 3 commit: every F8 program (p1 = the devnet epoch-0 seeds, + /// p2 to p64 = the attack-pass harness's label-derived seeds), drawn under this commit's verdicts, each load + /// site's distinct word indices over 2^20 evaluations against the window expectation N - N^2 / 2W, the minimum + /// ratio per seed. Clean seeds set the threshold; the failing seeds of F8's table must sit below it. + #[test] + #[ignore] + fn diag_f8_64_distinct_index_ratios() { + use crate::seed::seed_words_from_bytes; + let w = |s: String| -> Vec { seed_words_from_bytes(s.as_bytes()).iter().flat_map(|x| x.to_le_bytes()).collect() }; + let hx = |h: &str| -> Vec { (0..h.len()).step_by(2).map(|i| u8::from_str_radix(&h[i..i + 2], 16).unwrap()).collect() }; + let n = 1u64 << 20; + for k in 1..=64u32 { + let (epoch, era) = if k == 1 { + let g = hx("edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07"); + (g.clone(), g) + } else { + (w(format!("igneum-attack-f8/program/{k}")), w(format!("igneum-attack-f8/era/{k}"))) + }; + let label = format!("igneum-epoch/{}", epoch.iter().map(|b| format!("{b:02x}")).collect::()); + let p = generate_era(&label, &epoch, V4_CLASS, &era, &V3_ALLOWED); + let t0 = std::time::Instant::now(); + let d = crate::accept::distinct_indices_v4(&p, 4096).unwrap(); + let mut ratios = Vec::new(); + let mut site = 0usize; + for i in &p.instrs { + if !i.op.is_load() { continue; } + let k_off = (i.win as u64).min(2); + let wsize = (1u64 << 28) >> k_off; + let expected = n as f64 - (n as f64) * (n as f64) / (2.0 * wsize as f64); + ratios.push((d[site] as f64 / expected, site, i.win)); + site += 1; + } + let (min_ratio, min_site, min_win) = ratios.iter().cloned().fold((9.0, 0, 0), |a, b| if b.0 < a.0 { b } else { a }); + println!("RATIO p{k} attempt {} id {:016x}: min {:.4} at site {} (win {}) ; all {} ; {:.1} s", p.attempt, p.program_id(), min_ratio, min_site, min_win, ratios.iter().map(|r| format!("{:.3}", r.0)).collect::>().join(" "), t0.elapsed().as_secs_f64()); + } + } + + /// The 2^24 reach of the ratio for the weak failing seeds (p34, p4, p8, p10 at 1.22x to 1.50x sit inside the + /// clean spread at 2^20), with p23 and five clean seeds as the scale. + #[test] + #[ignore] + fn diag_f8_weak_seeds_at_2e24() { + use crate::seed::seed_words_from_bytes; + let w = |s: String| -> Vec { seed_words_from_bytes(s.as_bytes()).iter().flat_map(|x| x.to_le_bytes()).collect() }; + let n = 1u64 << 24; + for k in [34u32, 4, 8, 10, 23, 2, 3, 5, 44, 52] { + let (epoch, era) = (w(format!("igneum-attack-f8/program/{k}")), w(format!("igneum-attack-f8/era/{k}"))); + let label = format!("igneum-epoch/{}", epoch.iter().map(|b| format!("{b:02x}")).collect::()); + let p = generate_era(&label, &epoch, V4_CLASS, &era, &V3_ALLOWED); + let t0 = std::time::Instant::now(); + let d = crate::accept::distinct_indices_v4(&p, 65536).unwrap(); + let mut ratios = Vec::new(); + let mut site = 0usize; + for i in &p.instrs { + if !i.op.is_load() { continue; } + let wsize = (1u64 << 28) >> (i.win as u64).min(2); + let expected = n as f64 - (n as f64) * (n as f64) / (2.0 * wsize as f64); + ratios.push(d[site] as f64 / expected); + site += 1; + } + let min = ratios.iter().cloned().fold(9.0f64, f64::min); + println!("RATIO24 p{k} attempt {} id {:016x}: min {:.4} ; all {} ; {:.1} s", p.attempt, p.program_id(), min, ratios.iter().map(|r| format!("{:.3}", r)).collect::>().join(" "), t0.elapsed().as_secs_f64()); + } + } + + #[test] + fn class_v4_draw_is_total_with_the_last_resort() { + assert_eq!(max_attempts_for(&V4_CLASS), MAX_ATTEMPTS_V4); + assert_eq!(max_attempts_for(&LoadClass::era(V4_CLASS, &[7u8; 32], &V3_ALLOWED)), MAX_ATTEMPTS_V4); + assert_eq!(max_attempts_for(&V3_CLASS), MAX_ATTEMPTS); + assert_eq!(max_attempts_for(&LoadClass::V2), MAX_ATTEMPTS); + let class = LoadClass::era(V4_CLASS, &EraParams::test_era_bytes("igneum-era-test/0"), &V3_ALLOWED); + // real candidates that rule (a') rejects (the exhausting shape of seed igneum-f9/331672 at 07a809a7: 32 in a + // row), repaired by the last resort: every load's source fresh in the loop's steady state + let mut rejected = 0; + for i in 0..64u32 { + let seed = format!("igneum-ca3-v4-amend/total/{i}"); + for attempt in 0..4u32 { + let c = candidate_class(&seed, seed.as_bytes(), attempt, class); + if matches!(crate::accept::check_fresh_sources_v4(&c), Err(crate::accept::Reject::UnfreshLoadSource { .. })) { + rejected += 1; + let fixed = last_resort_v4(c.clone()); + assert!(crate::accept::check_fresh_sources_v4(&fixed).is_ok(), "{seed} attempt {attempt}: the last resort is fresh at every load"); + assert!(fixed.instrs.iter().chain(fixed.shadow.iter()).all(|i| !matches!(i.op, Op::Or | Op::Mul | Op::MulHi))); + assert_eq!((fixed.instrs.len(), fixed.shadow.len()), (c.instrs.len(), c.shadow.len())); + } + } + } + assert!(rejected > 0, "the sample holds (a')-rejected candidates (about two thirds of attempts do)"); + // the chain path is total: 64 seeds, every one a program + for i in 0..64u32 { + let seed = format!("igneum-ca3-v4-amend/total/{i}"); + let p = try_generate_class(&seed, seed.as_bytes(), class).expect("a class v4 seed always draws"); + assert!(crate::accept::check_fresh_sources_v4(&p).is_ok()); + assert!(p.attempt < MAX_ATTEMPTS_V4 || p.instrs.iter().chain(p.shadow.iter()).all(|i| !matches!(i.op, Op::Or | Op::Mul | Op::MulHi))); + } + } + #[test] fn program_class_v4_is_class_v3_with_the_shadow_block() { assert_eq!(V4_CLASS, V3_CLASS.with_shadow(256, 27)); @@ -1803,9 +2072,32 @@ mod tests { assert_eq!(v4.generator, GENERATOR_VERSION_V4); assert_eq!(v4.program_class(), ProgramClass::V4); assert_eq!(v4.era_bytes.as_deref(), Some(&era[..])); - assert_eq!(v4.instrs, v3.instrs, "the base program is class v3's, draw for draw"); - assert_eq!(v4.attempt, v3.attempt); - assert_eq!(v4.seed, v3.seed); + // The AP-F8-1 amendment (7 October 2026): class v4's chain draw takes a load's source only from registers + // whose last writer injects or rotates, so its base program is its own stream (the 6 October stream, equal + // to class v3's draw for draw, is sub-version 0 and never stamped); the load slots, the op draws and the era + // draw are still class v3's, and every load site obeys the rule + // sub-version 2 rejects candidates (rules (a') and (c')), so the accepted attempt can differ from class v3's and + // the seed words carry the attempt: compare with the class v3 candidate at the SAME attempt + let v3c = candidate_class("igneum-genesis", b"igneum-genesis", v4.attempt, LoadClass::era(V3_CLASS, &era, &V3_ALLOWED)); + assert_eq!(v4.seed, v3c.seed); + assert_eq!( + v4.instrs.iter().map(|i| i.op.is_load()).collect::>(), + v3c.instrs.iter().map(|i| i.op.is_load()).collect::>(), + "the load slots are class v3's at the same attempt" + ); + assert!(every_load_source_fresh(&v4), "every load of the amended v4 program reads a fresh register"); + let v3c_as_v4 = Program { class: v4.class, shadow: v4.shadow.clone(), ..v3c.clone() }; + if !every_load_source_fresh(&v3c_as_v4) { + assert_ne!(v4.instrs, v3c.instrs, "the amended v4 base program is not class v3's (a lossy-sourced load was redrawn)"); + } + // the same seed without an era draws under the rule too (sub-version 2: the rule is keyed on the class shape on + // every draw path), and the v3 program of the seed is the known-failed case + let v4_no_era = generate_from_seed_bytes_class("igneum-genesis", b"igneum-genesis", V4_CLASS); + assert!(every_load_source_fresh(&v4_no_era)); + // the known-failed case: the v3 program of the same seed and era, re-labelled with the v4 shape so the rule + // applies, carries an unfresh load source (96.6 percent of chain-shaped seeds do, ca3-v4-uniform.md section 3) + let v3_as_v4 = Program { class: v4.class, shadow: v4.shadow.clone(), ..v3.clone() }; + println!("class v3 of igneum-genesis under era [7; 32] (attempt {}): every load source fresh = {}; v4 accepted at attempt {}", v3.attempt, every_load_source_fresh(&v3_as_v4), v4.attempt); assert!(v3.shadow.is_empty() && !v3.has_shadow()); assert_eq!(v4.shadow.len(), 256); assert_eq!(v4.shadow_reps(), 27); @@ -2063,10 +2355,16 @@ mod tests { fn shadow_class_leaves_the_base_program_and_class_v3_untouched() { // Counter ASIC 3.0 item 8: the shadow is drawn after the 64 base instructions, so the base program, its // attempt and its acceptance verdict are the class's without the shadow; v2 and v3 draw nothing. + // Since class v4 sub-version 2 (AP-F8-1) a 256-instruction block over MX8 is the class v4 shape and draws its + // load sources under the dataflow rule on every path, so the "untouched" property is shown on a 64-instruction + // block (a measurement class, no rule) and the 256-block is shown to obey the rule instead let base = generate_class("igneum-genesis", LoadClass::MX8); + let sh64 = generate_class("igneum-genesis", LoadClass::MX8.with_shadow(64, 13)); + assert_eq!(sh64.instrs, base.instrs); + assert_eq!(sh64.attempt, base.attempt); + assert_eq!(sh64.shadow.len(), 64); let sh = generate_class("igneum-genesis", LoadClass::MX8.with_shadow(256, 13)); - assert_eq!(sh.instrs, base.instrs); - assert_eq!(sh.attempt, base.attempt); + assert!(crate::accept::check_fresh_sources_v4(&sh).is_ok(), "a 256-block over MX8 draws under the class v4 source rule"); assert!(base.shadow.is_empty() && !base.has_shadow() && base.shadow_instrs_per_hash() == 0); assert_eq!(sh.shadow.len(), 256); assert!(sh.has_shadow()); diff --git a/igneum-pow/src/packcheck.rs b/igneum-pow/src/packcheck.rs index 177d74b3a..ee0490662 100644 --- a/igneum-pow/src/packcheck.rs +++ b/igneum-pow/src/packcheck.rs @@ -195,6 +195,15 @@ pub fn verify_pack_texts_chain( let shadow = define_u32(program_h, "IGNEUM_SHADOW_INSTRS").unwrap_or(0); match (class, shadow > 0) { (ProgramClass::V4, false) => return Err(PackFault::Disagree("IGNEUM_GENERATOR 4 (class v4) without IGNEUM_SHADOW_INSTRS: not a class v4 pack".into())), + // the class v4 stream sub-version (AP-F8-1 amendment, 7 October 2026): a generator 4 pack from before the + // load-source rule carries no IGNEUM_PROGRAM_SUBVERSION and its program id is another stream's; refused + (ProgramClass::V4, true) if define_u32(program_h, "IGNEUM_PROGRAM_SUBVERSION") != Some(u32::from(crate::generator::PROGRAM_SUBVERSION_V4)) => { + return Err(PackFault::Disagree(format!( + "IGNEUM_GENERATOR 4 (class v4) with IGNEUM_PROGRAM_SUBVERSION {}: this software runs sub-version {} (a class v4 pack from before the load-source rule, or after another amendment)", + define_u32(program_h, "IGNEUM_PROGRAM_SUBVERSION").map(|v| v.to_string()).unwrap_or_else(|| "absent".into()), + crate::generator::PROGRAM_SUBVERSION_V4 + ))) + } (ProgramClass::V3, true) => { return Err(PackFault::Disagree(format!("IGNEUM_GENERATOR 3 (class v3) with a shadow block (IGNEUM_SHADOW_INSTRS {shadow}): a class v4 program is generator 4 (export the pack as class v4)"))) } diff --git a/igneum-pow/tests/mixer.rs b/igneum-pow/tests/mixer.rs index eebda7f47..61e32aa05 100644 --- a/igneum-pow/tests/mixer.rs +++ b/igneum-pow/tests/mixer.rs @@ -18,7 +18,7 @@ //! shadow, draw for draw. The edge test is the dataset's alone (the shadow touches no dataset word) and takes no class. use igneum_pow::emit::{export_pack, vectors_json}; -use igneum_pow::generator::{era_generator_of, generate_era, generate_from_seed_bytes, generate_from_seed_bytes_class, generate_from_seed_bytes_program_class, EraParams, LoadClass, Op, Program, ProgramClass, GENERATOR_VERSION_V3, GENERATOR_VERSION_V4, INSTR_COUNT, V3_ALLOWED, V3_CLASS}; +use igneum_pow::generator::{era_generator_of, generate_era, generate_from_seed_bytes, generate_from_seed_bytes_class, generate_from_seed_bytes_program_class, EraParams, LoadClass, Op, Program, ProgramClass, GENERATOR_VERSION_V3, GENERATOR_VERSION_V4, INSTR_COUNT, V3_ALLOWED, V3_CLASS, V4_CLASS, V4_SHADOW_INSTRS}; use igneum_pow::memhard::{derive_item, mixer, round_key, Cache, MixParams, Shape}; use igneum_pow::seed::{day_key, SplitMix64}; use igneum_pow::verify::{DatasetMode, DatasetSource, Epoch}; @@ -92,8 +92,29 @@ fn contract(p: &Program, seed: &str, class: LoadClass, era: Option<[u8; 32]>) { assert_eq!((i.width, i.win, i.off), (1, 0, 0), "shadow #{k}: no load fields"); } let base = program_of(seed, LoadClass { shadow: None, ..class }, era); - assert_eq!(p.instrs, base.instrs, "{seed}: the base program is the class's without the shadow"); - assert_eq!(p.attempt, base.attempt); + let v4_shape = LoadClass { era: None, shadow: None, ..class } == LoadClass { shadow: None, ..V4_CLASS } && sh.instrs == V4_SHADOW_INSTRS; + if v4_shape { + // the amended class v4 (AP-F8-1, sub-version 2): on every draw path a load's source is a register + // fresh by dataflow (a load keeps freshness only from a fresh source; add, sub, xor, mad, shfl from + // either operand; rotates from their operand; or, mul, mulhi never), so its base program is its own + // stream, not class v3's; what holds is the rule itself, checked here on every load site in draw order + let mut fresh = [true; 8]; + for (k, i) in p.instrs.iter().enumerate() { + let (d, a) = (i.dst as usize, i.src as usize); + if i.op.is_load() { + assert!(fresh[a], "{seed}: load #{k} reads r{} which is not fresh by dataflow", i.src); + } + fresh[d] = match i.op { + Op::Load | Op::WLoad | Op::Scratch | Op::Hot => fresh[a], + Op::Add | Op::Sub | Op::Xor | Op::Mad | Op::Shfl => fresh[d] || fresh[a], + Op::Rotl | Op::Rotr => fresh[d], + Op::Or | Op::Mul | Op::MulHi => false, + }; + } + } else { + assert_eq!(p.instrs, base.instrs, "{seed}: the base program is the class's without the shadow"); + assert_eq!(p.attempt, base.attempt); + } if era.is_none() || p.generator == GENERATOR_VERSION_V4 { // a generator-2 program carries the shadow in its id bytes; a class v4 program is generator 4 // (ca3-v4-node 7c22d0d), so its id differs from the generator-3 id of the same seeds diff --git a/igneum-pow/tests/recheck.rs b/igneum-pow/tests/recheck.rs index d23977b40..9b2f4f768 100644 --- a/igneum-pow/tests/recheck.rs +++ b/igneum-pow/tests/recheck.rs @@ -132,6 +132,12 @@ fn program_ids_differ_between_class_v3_and_class_v4_of_one_seed() { let v3 = load("packs-ca2-mixer/mx8-devnet-epoch0", ProgramClass::V3); let v4 = load("packs-ca3-v4/v4-devnet-epoch0", ProgramClass::V4); assert_eq!(v3.reference.program.program_id(), 0x73bc_bfe8_ccf9_88f1, "the v3 control's id as pinned"); - assert_eq!(v4.reference.program.program_id(), 0xc120_d796_3abd_cd96, "the v4 candidate's id as pinned"); + // the amended class v4 (AP-F8-1, AP-F8-3): sub-version 3 (object byte 7; the acceptance executes the shadow block) + // is the pinned id below; c120d7963abdcd96 (the 6 October stream, byte 4), 1a4230699a6b9c60 (sub-version 1, the + // one-writer rule, 0.3.20's and 0.3.21's byte 5) and a788661687db4bb3 (sub-version 2, never shipped) must differ + assert_ne!(v4.reference.program.program_id(), 0xc120_d796_3abd_cd96, "the pre-amendment v4 id must differ"); + assert_ne!(v4.reference.program.program_id(), 0x1a42_3069_9a6b_9c60, "the sub-version-1 id must differ"); + assert_ne!(v4.reference.program.program_id(), 0xa788_6616_87db_4bb3, "the sub-version-2 id must differ"); + assert_eq!(v4.reference.program.program_id(), 0xa785_0016_87d8_688a, "the sub-version-3 v4 id as pinned"); assert_ne!(v3.reference.program.program_id(), v4.reference.program.program_id()); } diff --git a/infra/build-server/devnet3/devnet3.conf b/infra/build-server/devnet3/devnet3.conf new file mode 100644 index 000000000..9236982dd --- /dev/null +++ b/infra/build-server/devnet3/devnet3.conf @@ -0,0 +1,17 @@ +# Devnet 3 on igneum-build-1 (0.3.22, main's order on the project lead's word, 7 October 2026): the network flag and the ports every script here +# reads. NET_FLAGS is a PLACEHOLDER until the node lane names the object's flag in its commit (igneum-devnet-3: own network id and +# p2p port, every activation at 0, no override file). Ports follow the box's pattern (devnet 266x1 p2p; Devnet 2 seed 27610/27612/27790): +NET_FLAGS="--devnet --devnet-suffix=3" # PLACEHOLDER: replace with the node lane's flag for igneum-devnet-3 +IGNEUMD="/srv/artefacts/0322-69d1b56e/hands/igneumd" # the 0.3.22 candidate 69d1b56e (genesis timestamp fix; built 18:04 BST, 7 Oct 2026) +# the seed (a bare process beside the Devnet 2 one, run as build, empty datadir) +DN3_SEED_APPDIR=/home/build/dn3seed +DN3_SEED_P2P=26631 # ufw: opened 7 Oct 2026 (provision.sh P2P_PORTS carries it) +DN3_SEED_RPC=27630; DN3_SEED_JSON=27632; DN3_SEED_EVM=27810 +DN3_SEED_LOG=/home/build/dn3seed.log +# the hands' SECOND instances (the old devnet runs on for a day, so these run beside node1 and observer-node, not instead). +# Reconciled with the fleet lane's staging of 17:37 BST: ITS observer-node-dn3 (/srv/hands/bin/run-observer-node-dn3.sh, unit +# igneum-observer-node-dn3, rpc 26650, wrpc json 28650, p2p 26651, evm 26850, appdir /srv/hands/observer-node-dn3, peers from +# /srv/hands/dn3/dn3.env) is the observer instance; this lane runs the seed and node1-dn3 (p2p 26671, ufw open since 16:39Z). +DN3_NODE1_APPDIR=/srv/hands/node1-dn3; DN3_NODE1_P2P=26671; DN3_NODE1_RPC=26670; DN3_NODE1_JSON=28670; DN3_NODE1_EVM=26870 +DN3_OBS_APPDIR=/srv/hands/observer-node-dn3; DN3_OBS_P2P=26651; DN3_OBS_RPC=26650; DN3_OBS_JSON=28650; DN3_OBS_EVM=26850 +DN3_OBS_SCRIPT=/srv/hands/bin/run-observer-node-dn3.sh # the fleet lane's; devnet3.sh observer-node starts its unit, not a copy diff --git a/infra/build-server/devnet3/devnet3.sh b/infra/build-server/devnet3/devnet3.sh new file mode 100755 index 000000000..2facffc68 --- /dev/null +++ b/infra/build-server/devnet3/devnet3.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# Devnet 3 (0.3.22) on igneum-build-1: the seed as a bare process and the hands' second instances. Dry run by default, --go executes. +# infra/build-server/devnet3/devnet3.sh seed [--go] start the Devnet 3 seed (empty datadir, NET_FLAGS, the seed ports), read back +# infra/build-server/devnet3/devnet3.sh node1 [--go] a second node1 instance on Devnet 3 (own datadir and ports), read back +# infra/build-server/devnet3/devnet3.sh observer-node [--go] the same for the observer node (p2p on loopback, peers node1-dn3) +# infra/build-server/devnet3/devnet3.sh status pids, ports, digest and genesis lines of the three +# Read-back per instance: the first log line (igneumd/-), the commit string count in the running binary, the +# "Consensus params digest" line (the devnet-3 digest), the "[igneum-exec] genesis executed" line, the GRPC and P2P server +# lines. No unit yet: the processes are detached (setsid nohup) under the build user like the Devnet 2 seed; units follow once the +# network is green. The old devnet's node1 and observer-node are not touched. +set -euo pipefail +HERE=$(cd "$(dirname "$0")" && pwd); . "$HERE/devnet3.conf" +KEY="${IGNEUM_BUILD_KEY:-$HOME/.ssh/igneum_ed25519}"; HOST=$(head -1 "${IGNEUM_BUILD_HOST_FILE:-$HOME/.config/igneum/build-server}" | tr -d '[:space:]') +SSH=(ssh -i "$KEY" -o BatchMode=yes -o ConnectTimeout=15 "$HOST") +say() { echo "$(TZ=Europe/London date '+%H:%M:%S %Z') devnet3: $*" >&2; } +mode="${1:-}"; shift || true; GO=0; [ "${1:-}" = --go ] && GO=1 +case "$NET_FLAGS" in *suffix=3*) say "NET_FLAGS is still the placeholder ($NET_FLAGS): the node lane's flag goes into devnet3.conf first" ;; esac +case "$IGNEUMD" in *PLACEHOLDER*) [ "$mode" = status ] || { say "IGNEUMD is the placeholder: the 0.3.22 candidate's build fills it"; [ "$GO" = 0 ] || exit 1; } ;; esac +start_one() { # [extra args...] + local name="$1" appdir="$2" p2p="$3" rpc="$4" json="$5" evm="$6" log="$7"; shift 7 + local args="$NET_FLAGS --appdir=$appdir --rpclisten=127.0.0.1:$rpc --rpclisten-json=127.0.0.1:$json --evm-rpclisten=127.0.0.1:$evm --listen=$p2p --nodnsseed --disable-upnp --nologfiles --yes $*" + if [ "$GO" = 0 ]; then say "DRY $name: $IGNEUMD $args > $log"; return 0; fi + # ssh flattens its arguments into one remote command line, so the argument string travels base64-encoded (the first --go at + # 18:22 BST lost everything after the first flag: the seed started on the OLD devnet with digest c562d70e and port 26611) + "${SSH[@]}" bash -s -- "$name" "$IGNEUMD" "$appdir" "$log" "$(printf '%s' "$args" | base64 | tr -d '\n')" <<'REMOTE' +set -euo pipefail; name="$1"; bin="$2"; appdir="$3"; log="$4"; args="$(printf '%s' "$5" | base64 -d)" +[ -x "$bin" ] || { echo "no binary $bin"; exit 1; } +mkdir -p "$appdir"; [ -z "$(ls -A "$appdir")" ] || echo "note: $appdir is not empty: $(ls "$appdir" | tr '\n' ' ')" +case "$args" in *--devnet-suffix=3*) ;; *) echo "REFUSED: the argument line lacks --devnet-suffix=3: $args"; exit 1 ;; esac +cd "$(dirname "$log")"; setsid nohup "$bin" $args > "$log" 2>&1 < /dev/null & pid=$!; sleep 8 +echo "$name pid $pid alive=$(kill -0 $pid 2>/dev/null && echo yes || echo NO) commit-strings=$(grep -a -c "$(echo "$bin" | grep -oE '[0-9a-f]{8}' | tail -1)" /proc/$pid/exe 2>/dev/null || echo ?)" +head -1 "$log" | cut -c1-120; grep -oE "Consensus params digest: [0-9a-f]+" "$log" | head -1 +for i in $(seq 1 20); do grep -qE "genesis [0-9a-f]{8,} executed|P2P Server starting" "$log" && break; sleep 1; done +grep -oE "genesis [0-9a-f]+ executed" "$log" | head -1; grep -E "GRPC Server starting|P2P Server starting" "$log" | head -2 | cut -c1-100 +grep -iE "panic|error" "$log" | head -2 | cut -c1-140 || true +REMOTE +} +case "$mode" in + seed) start_one dn3-seed "$DN3_SEED_APPDIR" "0.0.0.0:$DN3_SEED_P2P" "$DN3_SEED_RPC" "$DN3_SEED_JSON" "$DN3_SEED_EVM" "$DN3_SEED_LOG" --maxinpeers=128 --outpeers=8 ;; + node1) start_one node1-dn3 "$DN3_NODE1_APPDIR" "0.0.0.0:$DN3_NODE1_P2P" "$DN3_NODE1_RPC" "$DN3_NODE1_JSON" "$DN3_NODE1_EVM" /srv/hands/node1-dn3.log --enable-unsynced-mining --addpeer=127.0.0.1:$DN3_SEED_P2P --maxinpeers=128 --outpeers=8 ;; + observer-node) # the fleet lane's instance: its unit (installed 16:39Z, disabled); IGNEUMD_DN3 and DN3_PEERS come from /srv/hands/dn3/dn3.env + if [ "$GO" = 0 ]; then say "DRY observer-node: sudo systemctl enable --now igneum-observer-node-dn3 (reads $DN3_OBS_SCRIPT; dn3.env IGNEUMD_DN3 must name the 0.3.22 artefact)"; "${SSH[@]}" 'grep -E "^(IGNEUMD_DN3|DN3_PEERS|DN3_LISTEN)=" /srv/hands/dn3/dn3.env'; else + ssh -i "$KEY" -o BatchMode=yes "root@${HOST#*@}" 'systemctl enable --now igneum-observer-node-dn3 && sleep 8 && systemctl is-active igneum-observer-node-dn3 && journalctl -u igneum-observer-node-dn3 --since "-60 s" --no-pager | grep -oE "igneumd/[^ ]+|Consensus params digest: [0-9a-f]+|genesis [0-9a-f]+ executed|P2P Server starting on: [^ ]+" | head -4'; fi ;; + status) "${SSH[@]}" "for l in $DN3_SEED_LOG /srv/hands/node1-dn3.log; do [ -f \$l ] && { echo \"== \$l\"; head -1 \$l | cut -c1-100; grep -oE 'Consensus params digest: [0-9a-f]+|genesis [0-9a-f]+ executed' \$l | head -2; tail -1 \$l | cut -c1-120; }; done; ss -ltn | awk '{print \$4}' | grep -E ':(26631|26651|26671|27630|26650|26670)\$' | tr '\n' ' '; echo" ;; + *) sed -n '2,12p' "$0" | sed 's/^# \{0,1\}//'; exit 2 ;; +esac diff --git a/infra/build-server/lease.sh b/infra/build-server/lease.sh index 09baf3551..5138474bb 100755 --- a/infra/build-server/lease.sh +++ b/infra/build-server/lease.sh @@ -82,7 +82,7 @@ run_cores() { say "holding cores $set (waited $waited s): $label" # the keeper closes the lock descriptors first: an inherited flock would outlive the release in its orphaned sleep ( for fd in "${fds[@]}"; do exec {fd}>&-; done; while kill -0 $$ 2>/dev/null; do touch "$LOCKS/lease-$$" 2>/dev/null; [ -s "$LOCKS/lease-$$" ] || printf '%s\n' "$line" > "$LOCKS/lease-$$"; sleep 20; done ) & local keeper=$! - nice -n "$nice" taskset -c "$set" "$@"; local rc=$? + if [ "${LEASE_NO_PIN:-0}" = 1 ]; then "$@"; else nice -n "$nice" taskset -c "$set" "$@"; fi; local rc=$? # LEASE_NO_PIN: the self-test (lock semantics only; a pinned fixture on a loaded box ran seconds late) pkill -P "$keeper" 2>/dev/null; kill "$keeper" 2>/dev/null; wait "$keeper" 2>/dev/null rm -f "$LOCKS/lease-$$"; say "released cores $set after $(( $(date +%s) - t0 )) s, exit $rc" exit $rc @@ -110,29 +110,34 @@ run_quiet() { } self_test() { t=$(mktemp -d); trap 'rm -rf "$t"' EXIT - export IGNEUM_BUILD_SLOTS_DIR="$t/locks" IGNEUM_BUILD_LOG_DIR="$t/log" LEASE_REAP_S=2; mkdir -p "$t/locks"; echo 2 > "$t/locks/slots" + # a PRIVATE lock directory (never the live _locks) and no pinning: the test is about the locks, and it must read the same on an + # idle box and on one at load 120 (the horizon lane, 7 Oct 2026: one red on a full gate, green a minute later) + export IGNEUM_BUILD_SLOTS_DIR="$t/locks" IGNEUM_BUILD_LOG_DIR="$t/log" LEASE_REAP_S=2 LEASE_NO_PIN=1; mkdir -p "$t/locks"; echo 2 > "$t/locks/slots" local me="$0" fail=0 f() { echo "lease self-test: FAIL: $*"; fail=1; } # 1. two leases on disjoint cores run together; the same core waits - bash "$me" cores 0-1 --label A -- bash -c "date +%s.%N > '$t/a.start'; sleep 2; date +%s.%N > '$t/a.end'" 2>/dev/null & - sleep 0.5; bash "$me" cores 2-3 --label B -- bash -c "date +%s.%N > '$t/b.start'" 2>/dev/null; sleep 0.2 - python3 -c "import sys; sys.exit(0 if float(open('$t/b.start').read()) < float(open('$t/a.start').read()) + 1.5 else 1)" || f "a lease on other cores waited for an unrelated lease" + bash "$me" cores 0-1 --label A -- bash -c "date +%s.%N > '$t/a.start'; sleep 6; date +%s.%N > '$t/a.end'" 2>/dev/null & + for i in $(seq 1 50); do [ -f "$t/a.start" ] && break; sleep 0.1; done + bash "$me" cores 2-3 --label B -- bash -c "date +%s.%N > '$t/b.start'" 2>/dev/null; sleep 0.2 + # B ran while A still held its cores (A sleeps 6 s): B's start is before A's end + python3 -c "import sys; sys.exit(0 if float(open('$t/b.start').read()) < float(open('$t/a.start').read()) + 5.5 else 1)" || f "a lease on other cores waited for an unrelated lease" bash "$me" cores 1-2 --label C -- bash -c "date +%s.%N > '$t/c.start'" 2>/dev/null python3 -c "import sys; sys.exit(0 if float(open('$t/c.start').read()) >= float(open('$t/a.end').read()) else 1)" || f "a lease sharing a core started before the holder released it" wait [ -z "$(ls "$t/locks" | grep -E '^(lease|wait)-')" ] || f "lease or wait files left behind: $(ls "$t/locks")" # 2. quiet is refused while a slot is held, and runs on an idle box with a holder line naming the owner - ( exec 9>>"$t/locks/build-0"; flock 9; echo "pid $BASHPID since x waited 0 s: fake build" > "$t/locks/build-0"; sleep 2 ) & - sleep 0.3; bash "$me" quiet --label Q --owner tester -- true 2>/dev/null; [ $? = 73 ] || f "quiet was not refused while a slot was held" + ( exec 9>>"$t/locks/build-0"; flock 9; echo "pid $BASHPID since x waited 0 s: fake build" > "$t/locks/build-0"; sleep 6 ) & + for i in $(seq 1 50); do [ -s "$t/locks/build-0" ] && break; sleep 0.1; done + bash "$me" quiet --label Q --owner tester -- true 2>/dev/null; [ $? = 73 ] || f "quiet was not refused while a slot was held" wait; : > "$t/locks/build-0" bash "$me" quiet --label Q --owner tester -- bash -c "grep -q 'owner=tester' '$t/locks/quiet'" || f "quiet did not run on an idle box with the owner in its holder line" bash "$me" quiet --label Q --owner tester --cap-s 1 -- sleep 5; [ $? = 124 ] || f "the quiet cap did not end the command" # 3. a quiet is refused while a core is leased - bash "$me" cores 0 --label L -- sleep 2 2>/dev/null & sleep 0.5 + bash "$me" cores 0 --label L -- sleep 6 2>/dev/null & for i in $(seq 1 50); do ls "$t"/locks/lease-* >/dev/null 2>&1 && break; sleep 0.1; done bash "$me" quiet --label Q --owner tester -- true 2>/dev/null; [ $? = 73 ] || f "quiet was not refused while a core was leased" wait # 4. reap: a stopped holder older than the window is killed and its file cleared, with a line - bash "$me" cores 5 --label S -- sleep 60 2>/dev/null & local lp=$!; sleep 0.6 + bash "$me" cores 5 --label S -- sleep 60 2>/dev/null & local lp=$!; for i in $(seq 1 50); do ls "$t"/locks/lease-* >/dev/null 2>&1 && break; sleep 0.1; done; sleep 0.3 local hp; hp=$(sed -n 's/^pid \([0-9]*\) .*/\1/p' "$t"/locks/lease-* | head -1); kill -STOP "$hp"; sleep 2.5 touch -d '-10 seconds' "$t"/locks/lease-* 2>/dev/null [ "$(bash "$me" reap 2>/dev/null)" = 1 ] || f "the stopped lease holder was not reaped" @@ -140,7 +145,7 @@ self_test() { [ -z "$(ls "$t/locks" | grep '^lease-')" ] || f "the reaped lease file remains" kill -KILL "$lp" 2>/dev/null; wait 2>/dev/null # 5. a running (not stopped) holder is left alone - bash "$me" cores 6 --label R -- sleep 3 2>/dev/null & sleep 0.6; touch -d '-10 seconds' "$t"/locks/lease-* + bash "$me" cores 6 --label R -- sleep 6 2>/dev/null & for i in $(seq 1 50); do ls "$t"/locks/lease-* >/dev/null 2>&1 && break; sleep 0.1; done; sleep 0.3; touch -d '-10 seconds' "$t"/locks/lease-* [ "$(bash "$me" reap 2>/dev/null)" = 0 ] || f "a running holder was reaped"; wait [ "$fail" = 0 ] && echo "lease self-test: disjoint leases run together, a shared core waits, quiet is refused beside a slot or a lease and capped, a stopped holder is reaped after the window, a running one is kept" return $fail diff --git a/infra/build-server/lib.sh b/infra/build-server/lib.sh index 223d89568..b77d5e5b2 100755 --- a/infra/build-server/lib.sh +++ b/infra/build-server/lib.sh @@ -33,13 +33,13 @@ bs_route() { # -> the } # Spill-over (the project lead, 7 October 2026, 15:02 UK: build-1 at load 139 with a queue of 1 h 40 min while build-2 read 4.5 with both # slots free). The class is a PREFERENCE, not a pin: a job goes to its class's box unless that box has no free slot or its 1-minute -# load is above BS_SPILL_LOAD (64), in which case it goes to the other box when THAT one has a free slot under the same load +# load is above BS_SPILL_LOAD (80 since 19:4x BST, was 64), in which case it goes to the other box when THAT one has a free slot under the same load # line; when neither qualifies it queues on its own box. The alternate of box 1 is box 2, of box 2 box 1, of box 3 box 1; a box # without a host file is never chosen. The decision is one line on the Mac (bs_log) and travels to the box in BR_ROUTE_* for the # JSONL row ("route": preferred, box, spilled, reason), so the dashboard shows it per job. A box is read with one ssh # (bs_box_state: free slots of the slot count, load1); BS_ROUTE_STATE_ in the environment replaces the ssh for the self-test # (tools/ci/route-spill-check.sh), "down" standing for an unreachable box. -BS_SPILL_LOAD="${BS_SPILL_LOAD:-64}" +BS_SPILL_LOAD="${BS_SPILL_LOAD:-80}" # the project lead, 7 Oct 2026 19:4x BST: both boxes to near max; was 64 bs_box_state() { # -> "free= slots= load1=" | "absent" | "down" local b="$1" v f h v=$(eval "printf '%s' \"\${BS_ROUTE_STATE_$b:-}\""); if [ -n "$v" ]; then printf '%s' "$v"; return 0; fi diff --git a/infra/build-server/provision.sh b/infra/build-server/provision.sh index 7b098816b..a40c9b948 100755 --- a/infra/build-server/provision.sh +++ b/infra/build-server/provision.sh @@ -28,9 +28,10 @@ # `git worktree list` on the Mac; tools/build-remote.sh creates a missing one on first use) # SLOTS 2 remote build slots (tools/build-remote.sh takes one; remote-run.sh sets CARGO_BUILD_JOBS 90 when it holds # the only taken slot and 45 when both are held; a measurement takes the `measure` file and excludes builds) -# P2P_PORTS "26611 26811" TCP ports ufw opens beside 22: the devnet seed's p2p (infra/seed-nodes/config.sh devnet +# P2P_PORTS "26611 26811 26621" TCP ports ufw opens beside 22: the devnet seed's p2p (infra/seed-nodes/config.sh devnet # P2P_PORT=26611) and the testnet seed's (26811). A suffixed devnet (Devnet 2, the fleet's staging -# chain) listens on the same 26611 (infra/cloud-devnet/config.sh P2P_PORT=26611). RPC ports +# chain) listens on the same 26611 (infra/cloud-devnet/config.sh P2P_PORT=26611); the Devnet 2 seed that +# runs on build-1 as a bare process listens on 26621. RPC ports # (26610, 28610, 26790 and the 268xx set) stay on loopback as on every seed, so they are not opened. # BOX_HOSTNAME igneum-build-1 # WORKERS_HOST build.igneum.network Caddy serves /srv/workers/{workers,headline}.json there (read-only, all else 404) @@ -54,9 +55,9 @@ SCCACHE_VERSION="${SCCACHE_VERSION:-}" NODE_MAJOR="${NODE_MAJOR:-22}" WORKTREES="${WORKTREES:-}" SLOTS_GIVEN="${SLOTS:-}"; SLOTS="${SLOTS:-2}" # 2 since main's ruling of 6 October 2026 (20:3x UK); remote-run.sh gives 90 jobs alone, 45 beside another -P2P_PORTS="${P2P_PORTS:-26611 26811}" +P2P_PORTS="${P2P_PORTS:-26611 26811 26621 26631 26651}" # 26631 the Devnet 3 seed, 26651 the hands' Devnet 3 node1 (0.3.22, placeholders until the object lands) # 26621: the Devnet 2 seed on build-1 (blocked by ufw until 7 Oct 2026 16:40 BST; the fleet lane found it closed from outside) BOX_HOSTNAME="${BOX_HOSTNAME:-igneum-build-1}" -case "$BOX_HOSTNAME" in *-2) [ -n "$SLOTS_GIVEN" ] || SLOTS=3 ;; esac # build-2: three slots (main, 7 Oct 2026; the bounded runs take one 32-core band each) +case "$BOX_HOSTNAME" in *-2|*-4) [ -n "$SLOTS_GIVEN" ] || SLOTS=3 ;; esac # build-2 and build-4 (AX162-1, 96 threads): three slots (main, 7 Oct 2026; the bounded runs take one 32-core band each) WORKERS_HOST="${WORKERS_HOST:-build.igneum.network}" # the dashboard feed's HTTPS name (A record in deSEC, 6 Oct 2026) SSH_PUBKEY="${SSH_PUBKEY:-}" BUILD_USER=build @@ -74,7 +75,7 @@ RUNNER_LABELS="${RUNNER_LABELS:-igneum-build-1,ci-red}" # added to the defau # holds the red watcher's record file and poster. A second box: BOX_HOSTNAME=igneum-build-2 # RUNNER_LABELS=igneum-build-1,igneum-build-2 RUNNER_CPUS=0-31 RUNNER_JOBS=32 (register.sh --host) RUNNER_CPUS="${RUNNER_CPUS:-}" # AllowedCPUs for the runner's service when set (a second box is bounded like a suite: 32 cores, nice 10) -case "$BOX_HOSTNAME" in *-2|*-3) [ -n "$RUNNER_CPUS" ] || RUNNER_CPUS="0-31" ;; esac # build-2 and build-3 join the pool (label igneum-build-1) bounded to 32 cores at Nice 10 (main, 7 Oct 2026) +case "$BOX_HOSTNAME" in *-2|*-3|*-4) [ -n "$RUNNER_CPUS" ] || RUNNER_CPUS="0-31" ;; esac # build-2, build-3 and build-4 join the pool (label igneum-build-1) bounded to 32 cores at Nice 10 (main, 7 Oct 2026) RUNNER_JOBS="${RUNNER_JOBS:-48}" # cargo jobs for a CI job: half the box, the agents' builds keep the rest RUNNER_TOKEN="${RUNNER_TOKEN:-}" # a registration token (1 h), from infra/build-server/runner/register.sh over stdin; never logged RUNNER_SCCACHE_PORT="${RUNNER_SCCACHE_PORT:-4227}" # the runner's own sccache server; 4226 is the build user's diff --git a/infra/build-server/remote-run.sh b/infra/build-server/remote-run.sh index 5bf2a5474..c0e0c1969 100755 --- a/infra/build-server/remote-run.sh +++ b/infra/build-server/remote-run.sh @@ -178,7 +178,8 @@ fi if [ "${1:-}" = --self-test-slots ]; then me="${IGNEUM_REMOTE_RUN_UNDER_TEST:-$0}" t=$(mktemp -d); trap 'rm -rf "$t"' EXIT - mkdir -p "$t/locks" "$t/log" "$t/dir"; echo 2 > "$t/locks/slots" + # a PRIVATE lock directory, never the live _locks; a 3 s settle so two fakes that start seconds apart on a loaded box still see each other + mkdir -p "$t/locks" "$t/log" "$t/dir"; echo 2 > "$t/locks/slots"; export BR_SETTLE_S=3 fake() { # [BR_MEASURE=1]: a fake run that records its start and end epoch and the job count it was given local name="$1" secs="$2" measure="${3:-0}" IGNEUM_BUILD_SLOTS_DIR="$t/locks" IGNEUM_BUILD_LOG_DIR="$t/log" BR_MEASURE="$measure" BR_CORES="${BR_CORES:-0}" BR_NICE="${BR_NICE:-0}" BR_DIR="$t/dir" BR_CMD="date +%s.%N > '$t/$name.start'; echo JOBS=\${CARGO_BUILD_JOBS:-none} > '$t/$name.jobs'; sleep $secs; date +%s.%N > '$t/$name.end'" \ @@ -188,19 +189,19 @@ if [ "${1:-}" = --self-test-slots ]; then fail() { echo "self-test-slots: FAIL: $*"; exit 1; } after() { python3 -c "import sys; sys.exit(0 if float(open(sys.argv[1]).read()) >= float(open(sys.argv[2]).read()) else 1)" "$1" "$2"; } # 1. two concurrent builds: 45 jobs each - fake a 3 & fake b 3 & wait - [ "$(cat "$t/a.jobs")" = JOBS=45 ] && [ "$(cat "$t/b.jobs")" = JOBS=45 ] || fail "two concurrent builds got $(cat "$t/a.jobs" "$t/b.jobs" | tr '\n' ' ') (want JOBS=45 JOBS=45)" + fake a 6 & fake b 6 & wait + [ "$(cat "$t/a.jobs")" = JOBS=44 ] && [ "$(cat "$t/b.jobs")" = JOBS=44 ] || fail "two concurrent builds got $(cat "$t/a.jobs" "$t/b.jobs" | tr '\n' ' ') (want JOBS=44 JOBS=44)" # 2. one build alone: 90 fake c 1 - [ "$(cat "$t/c.jobs")" = JOBS=90 ] || fail "a lone build got $(cat "$t/c.jobs") (want JOBS=90)" + [ "$(cat "$t/c.jobs")" = JOBS=88 ] || fail "a lone build got $(cat "$t/c.jobs") (want JOBS=88)" # 3. a quiet measurement blocks an unbounded build (it starts only after the quiet ended) and lets a bounded suite run beside it - fake m 3 1 & sleep 0.5; fake d 1 & BR_CORES=1 BR_NICE=10 fake s 1 & wait + fake m 9 1 & sleep 0.5; fake d 1 & BR_CORES=1 BR_NICE=10 fake s 1 & wait # the quiet holds 9 s: longer than a slot take plus the 3 s settle after "$t/d.start" "$t/m.end" || fail "an unbounded build started while a quiet measurement held the box (build start $(cat "$t/d.start"), quiet end $(cat "$t/m.end"))" python3 -c "import sys; sys.exit(0 if float(open('$t/s.start').read()) < float(open('$t/m.end').read()) else 1)" || fail "a bounded suite waited for the quiet measurement" [ "$(cat "$t/m.jobs")" = JOBS=none ] || fail "a measurement was given a job count" grep -q 'owner=self-test' "$t/m.out" "$t/log/builds.jsonl" 2>/dev/null || fail "the quiet holder line lacks its owner" # 4. a quiet measurement is REFUSED (exit 73) while a build holds a slot or a core is leased - fake e 3 & sleep 0.5; fake n 1 1; rc=$?; wait + fake e 6 & sleep 0.5; fake n 1 1; rc=$?; wait [ "$rc" = 73 ] && [ ! -f "$t/n.start" ] || fail "a quiet measurement was not refused while a build ran (rc $rc)" ( exec 9>>"$t/locks/core-7"; flock 9; sleep 6 ) & sleep 0.5; fake o 1 1; rc=$?; wait [ "$rc" = 73 ] || fail "a quiet measurement was not refused while a core was leased (rc $rc)" @@ -213,8 +214,8 @@ if [ "${1:-}" = --self-test-slots ]; then grep -q 'self-test f' "$t/locks/build-0" || fail "the holder line of the busy slot build-0 was lost when another build probed it: '$(cat "$t/locks/build-0")'" wait # 6. the log carries the job count and the measure flag - grep -q '"jobs":45' "$t/log/builds.jsonl" && grep -q '"measure":true' "$t/log/builds.jsonl" || fail "builds.jsonl lacks jobs or measure fields" - echo "self-test-slots: two concurrent builds 45 each, a lone build 90, a quiet blocks an unbounded build and not a bounded suite, a quiet is refused beside a slot or a lease, a run keeps off leased cores, a probe keeps the holder line, the log carries jobs and measure"; exit 0 + grep -q '"jobs":44' "$t/log/builds.jsonl" && grep -q '"measure":true' "$t/log/builds.jsonl" || fail "builds.jsonl lacks jobs or measure fields" + echo "self-test-slots: two concurrent builds 44 each, a lone build 88, a quiet blocks an unbounded build and not a bounded suite, a quiet is refused beside a slot or a lease, a run keeps off leased cores, a probe keeps the holder line, the log carries jobs and measure"; exit 0 fi # One run per worktree directory at a time (6 October 2026, 19:51:09 UK: two runs of one worktree started in the same second; @@ -317,7 +318,7 @@ PY SLOTS_DIR="$IGNEUM_BUILD_SLOTS_DIR" slots=$(cat "$SLOTS_DIR/slots" 2>/dev/null || echo 1); [ "$slots" -ge 1 ] 2>/dev/null || slots=1 -JOBS_ALONE="${JOBS_ALONE:-90}"; JOBS_SHARED="${JOBS_SHARED:-45}" +JOBS_ALONE="${JOBS_ALONE:-88}"; JOBS_SHARED="${JOBS_SHARED:-44}" # the project lead, 7 Oct 2026: 88 of 96 cores, 8 reserved for the release builds, the seed and the observers holder_line() { printf 'pid %s since %sZ waited %s s: %s\n' "$BR_PID" "$(date -u +%H:%M:%S)" "$1" "$BR_LABEL"; } give_up() { # echo "build-remote: gave up waiting for $1 after 2 h" >&2 @@ -382,8 +383,9 @@ else fi waited=$(( $(date +%s) - BR_T0 )) holder_line "$waited" > "$SLOTS_DIR/build-$got" - # the job count: let a build that started in the same second take its slot, then count the slots held (this one included) - sleep 1 + # the job count: let a build that started in the same second take its slot, then count the slots held (this one included); + # BR_SETTLE_S widens it for the self-test on a loaded box + sleep "${BR_SETTLE_S:-1}" held=0 for k in $(seq 0 $((slots - 1))); do if [ "$k" = "$got" ]; then held=$((held + 1)); continue; fi @@ -467,6 +469,9 @@ BR_RUN_LOG="$RUN_LOG_DIR/$BR_HOST-$BR_T0-$BR_PID.log"; export BR_RUN_LOG # (since the third slot on build-2, 7 Oct 2026: a bounded run takes the band its SLOT owns, counted from the top: slot 0 the last N # cores, slot 1 the N below, slot 2 the N below that, so three bounded runs never share a core; a band below core 0 falls back to # the last N) +# (the project lead, 7 Oct 2026 19:4x BST, both boxes to near max: a bounded run takes the LAST N cores, N = 88 by default, leaving the first 8 +# to the release builds, the seed and the observer processes; with N above half the box the slots share the band, and nice 10 plus +# the per-slot jobs rule keep two suites fair; a smaller N (IGNEUM_BOUND_CORES) returns to disjoint bands per slot when it fits) ncpu=$(nproc); cores_str="0-$((ncpu - 1))" if [ "${BR_CORES:-0}" -gt 0 ] && [ "${BR_CORES}" -lt "$ncpu" ]; then band=0; case "${got:-}" in ''|measure) ;; *) band=$got ;; esac diff --git a/infra/fast-time/override-60x.json b/infra/fast-time/override-60x.json index 3561c8d23..54f94f002 100644 --- a/infra/fast-time/override-60x.json +++ b/infra/fast-time/override-60x.json @@ -66,6 +66,11 @@ "proving_v1_segment_blocks": 8, "proving_v1_unproven_daa": 10, "proving_v1_aggregator_share_bps": 1000, + "pow_era_blocks": 259200, + "pow_era_lead": 120, + "era_vdf_activation_daa": 18446744073709551615, + "vdf_scheme": 0, + "era_vdf_t": 108000000, "fees_v1_activation_daa": 0, "difficulty_v3_activation_daa": 18446744073709551615, "finality_daa_rule_activation_daa": 18446744073709551615, diff --git a/packaging/hive/README.md b/packaging/hive/README.md index ed06aca85..1f7219f93 100644 --- a/packaging/hive/README.md +++ b/packaging/hive/README.md @@ -82,6 +82,16 @@ Stats JSON (what Hive reads from `$stats`): `hs` (kH/s per GPU), `hs_units` (`kh digest on the downloads page; a different one means the override is stale and the node is refused. - Ports: the bundled node listens on 26611 (p2p) and answers RPC on 127.0.0.1:26610 only. +## Shipped packs (0.3.22) + +`make-hive-package.sh --kit ` (repeatable) puts program-pack kits under `packs/` in the archive: the class v4 sub-version 3 +kit (eight packs, program_id `a785001687d8688a` for the shared devnet's epoch 0) and Devnet 3's epoch-0 pack +`v4-devnet3-epoch0` (program_id `fce15bf61030be57`, exported under igneum-pow 017e7037 over genesis `4020cb43` as epoch and +era seed, day bytes for 7 October UTC). They are the rig's FIRST-START convenience: `h-run.sh` seeds `packs/devnet` from the +shipped pack only when the node's own export left nothing, so a rig mines from its first start; the pack is dated, and a rig +starting after epoch 0 (3,600 DAA) re-exports from its own node as before. The shipped pack is never the authority; the +pack-id gate reads `program.json`'s `program_id`. + ## Building the package infra/cross/build-linux.sh # igneumd and igneum-miner for Linux (cargo-zigbuild), into infra/cross/out diff --git a/packaging/hive/h-run.sh b/packaging/hive/h-run.sh index 6622666bf..a498e3b81 100755 --- a/packaging/hive/h-run.sh +++ b/packaging/hive/h-run.sh @@ -73,7 +73,17 @@ say "GPUs: $nv NVIDIA, $amd AMD (worker setting: $WORKER)" # 3. the hourly program pack from the node (the workers read it with --pack; the miner writes the next one to packs/prepare) export_pack() { [[ "$NODE_URL" == "none" ]] && return 0; rm -rf "$HERE/packs/devnet"; "$BIN/igneum-miner" export-pack "$NODE_URL" "$HERE/packs/devnet" >> "$MAIN" 2>&1; } +# a shipped pack (packs//program.json, from make-hive-package.sh --kit; 0.3.22) seeds packs/devnet ONLY when the node's own +# export left nothing: the rig's first-start convenience, never the authority (a rig starting after epoch 0 re-exports from its node; +# the miner's --prepare-packs and exit 42 keep it on the chain's program as before). SHIPPED_PACK names the directory under packs/ +# (h-config.sh or the Flight Sheet; default v4-devnet3-epoch0 when it exists). +seed_pack() { + [[ -d "$HERE/packs/devnet" && -f "$HERE/packs/devnet/program.json" ]] && return 0 + local sp="${SHIPPED_PACK:-v4-devnet3-epoch0}" + if [[ -f "$HERE/packs/$sp/program.json" ]]; then rm -rf "$HERE/packs/devnet"; cp -R "$HERE/packs/$sp" "$HERE/packs/devnet"; say "first start: packs/devnet seeded from the shipped pack $sp (program_id $(sed -n 's/.*"program_id" *: *"\{0,1\}\([0-9a-fx]*\)"\{0,1\}.*/\1/p' "$HERE/packs/$sp/program.json" | head -1)); the node's export replaces it"; fi +} export_pack || say "pack export failed; the miners retry" +seed_pack # 4. one miner per GPU, restarted on exit (exit 42 = the program changed and the worker cannot prepare: re-export the pack) run_gpu() { diff --git a/packaging/hive/make-hive-package.sh b/packaging/hive/make-hive-package.sh index 1278a7688..af540b481 100755 --- a/packaging/hive/make-hive-package.sh +++ b/packaging/hive/make-hive-package.sh @@ -4,6 +4,8 @@ # and infra/cross/out-workers (the two GPU workers, build-workers-linux.sh) # NODE_OUT=... WORKERS_OUT=... VERSION=... OUT=... other inputs; VERSION defaults to the igneumd version in version.txt # --fake stub binaries instead (the self-test; never ship it) +# --kit (repeatable) program-pack kit(s) unpacked under packs/ in the tar (0.3.22: the sub-version 3 +# kit and Devnet 3's epoch-0 pack); the rig's first-start convenience, see h-run.sh # Output: packaging/hive/build/igneum-hive-.tar.gz with the directory igneum/ inside (what Hive expects: # the archive name carries the version, the directory does not), plus its sha256 and the Flight Sheet lines. set -euo pipefail @@ -12,7 +14,12 @@ REPO="$(cd "$HERE/../.." && pwd)" NODE_OUT="${NODE_OUT:-$REPO/infra/cross/out-v2}" WORKERS_OUT="${WORKERS_OUT:-$REPO/infra/cross/out-workers}" OUT="${OUT:-$HERE/build}" -FAKE=0; [[ "${1:-}" == "--fake" ]] && FAKE=1 +# --kit (repeatable; 0.3.22, 7 October 2026): a program-pack kit unpacked under packs/ in the tar (the class v4 sub-version 3 +# packs and Devnet 3's epoch-0 pack, from the hash lane), the rig's FIRST-START convenience: h-run.sh seeds packs/devnet from a +# shipped pack only when the node's own export leaves nothing, and a rig starting after epoch 0 re-exports from its own node as +# before; the shipped pack is never the authority. The pack-id gate reads program.json's program_id. +FAKE=0; KITS=() +while [[ $# -gt 0 ]]; do case "$1" in --fake) FAKE=1; shift ;; --kit) KITS+=("$2"); shift 2 ;; *) echo "unknown argument $1" >&2; exit 2 ;; esac; done log() { printf '%s %s\n' "$(date -u +%H:%M:%S)" "$*"; } die() { log "ERROR: $*" >&2; exit 1; } stage="$OUT/igneum"; rm -rf "$stage"; mkdir -p "$stage/bin" @@ -34,6 +41,18 @@ else VERSION="${VERSION:-$(head -1 "$NODE_OUT/version.txt" | awk '{print $2}')}" fi [[ -n "$VERSION" ]] || die "no version (VERSION=... or a version.txt with 'igneumd ')" +if [[ ${#KITS[@]} -gt 0 ]]; then + mkdir -p "$stage/packs" + for k in "${KITS[@]}"; do + [[ -f "$k" ]] || die "no kit zip at $k" + unzip -q -o "$k" -d "$stage/packs" || die "kit $k does not unzip" + log "kit $(basename "$k") sha256 $(shasum -a 256 "$k" 2>/dev/null | awk '{print $1}' || sha256sum "$k" | awk '{print $1}') unpacked under packs/" + done + # every pack directory holds program.json; its program_id is what the pack-id gate reads + n=0; while IFS= read -r pj; do d="$(dirname "$pj")"; id="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("program_id",""))' "$pj" 2>/dev/null || true)"; log "pack ${d#"$stage/packs/"}: program_id ${id:-?}"; n=$((n+1)); done < <(find "$stage/packs" -name program.json | sort) + [[ $n -gt 0 ]] || die "the kit(s) hold no pack (no program.json found)" + printf 'packs: %s pack(s) from %s (first-start convenience; the rig re-exports from its own node)\n' "$n" "$(for k in "${KITS[@]}"; do basename "$k"; done | tr '\n' ' ')" >> "$stage/version.txt" +fi cp "$HERE/h-config.sh" "$HERE/h-run.sh" "$HERE/h-stats.sh" "$HERE/README.md" "$stage/" sed "s/^CUSTOM_VERSION=.*/CUSTOM_VERSION=$VERSION/" "$HERE/h-manifest.conf" > "$stage/h-manifest.conf" chmod +x "$stage"/h-*.sh "$stage"/bin/* diff --git a/packaging/ota/publish-jobs.sh b/packaging/ota/publish-jobs.sh index 38d2fdc2e..055304c1c 100755 --- a/packaging/ota/publish-jobs.sh +++ b/packaging/ota/publish-jobs.sh @@ -54,7 +54,7 @@ KIND="" TARGET="" PLATFORM="" REQUIRES="" REQUIRES_SET=0 ID="" TITLE="" EXPIRES_ SCRIPT="" SHELL_KIND="" ELEVATED=0 STOP_MINERS=0 TIMEOUT_MIN="" CARDS_OFF="" FILE="" URL="" SHA="" SIZE="" DIR="" TO="" EXTRACT=0 EXTRACT_DIR="" FRESH=0 GLOBS=() COMMAND="" WHAT="" -ZIP="" FIXTURES="" CAP_MIN="" DISTRO="" WSL_USER="" REMOVE_ID="" +ZIP="" FIXTURES="" CAP_MIN="" DISTRO="" WSL_USER="" REMOVE_ID="" FORCE="" INSTALLS_APP=0 TARGETS="" BUDGET_MIN="" STAGE_MIN="" MIN_FREE_GB="" TESTS=1 RELAY_URL="" NICE="" CARGO_JOBS="" case "$CMD" in remove) REMOVE_ID="${1:-}"; [ -n "$REMOVE_ID" ] || { echo "remove " >&2; exit 2; }; shift ;; @@ -67,6 +67,8 @@ while [ $# -gt 0 ]; do --requires) REQUIRES="$2"; REQUIRES_SET=1; [ "$REQUIRES" = none ] && REQUIRES=""; shift 2 ;; --id) ID="$2"; shift 2 ;; --title) TITLE="$2"; shift 2 ;; + --force) FORCE="$2"; shift 2 ;; # remove: override the running-job refusal, with the reason (7 Oct 2026) + --installs-app) INSTALLS_APP=1; shift ;; # add --kind run: the script installs over the app; never removed without --force --expires-hours) EXPIRES_H="$2"; shift 2 ;; --script) SCRIPT="$2"; shift 2 ;; --shell) SHELL_KIND="$2"; shift 2 ;; @@ -227,8 +229,8 @@ if [ "$CMD" = list ]; then [ -f "$JOBS" ] || { echo "no jobs file in $DEST"; exit 0; } "$SIGNER" verify-jobs "$PUB" "$JOBS" "$JOBS.sig" || { echo "the file in $DEST does not verify; run: $0 sign" >&2; exit 1; } if [ -f "$SIGNED" ]; then "$SIGNER" verify-signed-jobs "$PUB" "$SIGNED" >/dev/null || { echo "the envelope in $DEST does not verify; run: $0 sign" >&2; exit 1; }; else echo "(no igneum-jobs.signed.json yet; the next write makes one)"; fi - python3 - "$JOBS" <<'PY' -import json, sys, datetime + INSTALLS_APP="$INSTALLS_APP" python3 - "$JOBS" <<'PY' +import json, sys, datetime, os f = json.load(open(sys.argv[1])) now = datetime.datetime.now(datetime.timezone.utc) for j in f.get("jobs", []): @@ -353,17 +355,36 @@ except Exception: print("")' "${ZIP%.zip}.json" 2>/dev/null || true)" esac [ -n "$PLATFORM" ] || PLATFORM=any [ -n "$ID" ] || ID="$KIND-$(date -u +%Y%m%d-%H%M%S)" - NEW_JOB="$(python3 -c 'import json,sys,datetime + NEW_JOB="$(INSTALLS_APP="$INSTALLS_APP" python3 -c 'import json,sys,datetime,os a=sys.argv now=datetime.datetime.now(datetime.timezone.utc) t={"machine_ids": "all" if a[2]=="all" else [x.strip().lower() for x in a[2].split(",") if x.strip()], "platform": a[3]} +if os.environ.get("INSTALLS_APP")=="1" and a[5]=="run": t.setdefault("params",{})["installs_app"]=True if a[4]: t["requires"]=[x.strip() for x in a[4].split(",") if x.strip()] print(json.dumps({"id": a[1], "kind": a[5], "title": a[6], "created_at": now.strftime("%Y-%m-%dT%H:%M:%SZ"), "expires_at": (now+datetime.timedelta(hours=float(a[7]))).strftime("%Y-%m-%dT%H:%M:%SZ"), "target": t, "params": json.loads(a[8]), "report": "log-intake"}))' "$ID" "$TARGET" "$PLATFORM" "$REQUIRES" "$KIND" "$TITLE" "$EXPIRES_H" "$PARAMS")" fi +# ---- the removal guard (7 October 2026, 18:53 BST: a removal reached PC 2 one second after its job had launched a silent +# installer over the running app; the runner's abort-on-removal ended the process tree and the app went dark). A remove refuses +# when any target's latest report for the id has started and carries no final line (the job is running), or when the job was +# published with --installs-app; `--force ""` overrides, and the reason is printed. The read is tools/jobs.mjs . +# REMOVE_GUARD_READ= replaces the read for the self-test (tools/ci/publish-jobs-check.sh). +if [ -n "$REMOVE_ID" ]; then + read_out="$( if [ -n "${REMOVE_GUARD_READ:-}" ]; then cat "$REMOVE_GUARD_READ"; else node "$ROOT/tools/jobs.mjs" "$REMOVE_ID" 2>/dev/null || true; fi )" + running="$(printf '%s\n' "$read_out" | grep -cE '^(job [^ ]+ \(.*\) on .* started|== running the)' || true)" + final="$(printf '%s\n' "$read_out" | grep -cE '^(SUMMARY: |job [^ ]+: (done|failed|aborted|timeout))' || true)" + jobs_now="$JOBS"; [ -f "$DEST/igneum-jobs.json" ] && jobs_now="$DEST/igneum-jobs.json" # the file at the destination this run writes + installs="$(python3 -c 'import json,sys; j=[x for x in json.load(open(sys.argv[1])).get("jobs",[]) if x.get("id")==sys.argv[2]]; print(1 if j and "\"installs_app\": true" in json.dumps(j[0]) else 0)' "$jobs_now" "$REMOVE_ID" 2>/dev/null || echo 0)" + if [ -z "$FORCE" ]; then + if [ "$running" -gt 0 ] && [ "$final" = 0 ]; then echo "remove refused: $REMOVE_ID has started on a machine and has no final line yet (a removal ends the running job's process tree); wait for its SUMMARY, or --force \"\"" >&2; exit 3; fi + if [ "$installs" = 1 ]; then echo "remove refused: $REMOVE_ID was published with --installs-app (it installs over the app); --force \"\" to remove it anyway" >&2; exit 3; fi + else + echo "remove: --force given ($FORCE); running=$running final=$final installs_app=$installs" + fi +fi # ---- merge: current jobs minus expired (minus a removed id), plus the new one; canonical JSON --------------------- NEW="$JOBS.new" -python3 - "$JOBS" "$NEW" "$NEW_JOB" "$REMOVE_ID" <<'PY' +INSTALLS_APP="$INSTALLS_APP" python3 - "$JOBS" "$NEW" "$NEW_JOB" "$REMOVE_ID" <<'PY' import json, sys, datetime, os cur, out, new_job, remove = sys.argv[1:5] now = datetime.datetime.now(datetime.timezone.utc) diff --git a/packaging/windows/node-source.pin b/packaging/windows/node-source.pin index 06cb181a4..4f9fa57d0 100644 --- a/packaging/windows/node-source.pin +++ b/packaging/windows/node-source.pin @@ -1 +1 @@ -4c6b129d75c3d77a3689d22f1e1dc721b556aebb +c4459193ff5ada38df21f900c91026d3f07c963f diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cl index e1be8bee1..2fc43692a 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cu index b0a692f86..7c8d33454 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x13/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cl index 857b927e4..441b691cd 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cu index 905e46250..84ebcee8f 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x13/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/program.json b/proto-cuda/packs-ca3-shadow/sh256x13/program.json index 6042bbe0d..b52604393 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x13/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/program.metal b/proto-cuda/packs-ca3-shadow/sh256x13/program.metal index 6a17edfd7..482f96a83 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x13/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x13/program_bound.metal index c089f8803..e22b25eb3 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x13/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x13/vectors.h index c1adcfecb..76a690841 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x13/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xb359d110ac143375ull, 0x748fb5308223a682ull, 0x2a809644b94a8216ull, 0x18548dad2999d526ull, 0xb793809331b0a189ull, 0x55b034de97b5dcfdull, 0x9506b188c1becd3cull, 0x6f2a3986cb1967b3ull, - 0x376f13355e35e6c4ull, 0x35db684678b0567bull, 0xfec8f41452c07083ull, 0x324ad57e71b201e5ull, 0x1f5def2519b0dff9ull, 0x07e54a4494f2283dull, 0xc698336cb18b866cull, 0xc9808c2475fe8d66ull, - 0x82021978b9d61925ull, 0x0ef2fa3310887ec6ull, 0xdb17534bb857c9ccull, 0x5203cbc6bdb4bbb2ull, 0xb0b2b24438cf1cc0ull, 0xcb1fa6bf5e701935ull, 0x3dca8b3408c4a3f7ull, 0xd7610b168cf2943cull, - 0xcfe566147a489c75ull, 0x6294533ee65da77dull, 0x2e0774f316868b26ull, 0xd2a10f4303777610ull, 0x2e3a4b91c8962246ull, 0x00063a312aa1f50bull, 0x003794aceed11052ull, 0xcc181405cd575561ull + 0x5e04f2a662a5ee43ull, 0xfe226a51dd3afd9aull, 0xf736ad4273733d12ull, 0x80f4cd86b586f13cull, 0xdfda49a7a0e11d97ull, 0x34e000a92f1c9ab6ull, 0x71fa206fa17a3813ull, 0x279bb4d961e951f9ull, + 0x44b548b4c0109247ull, 0x14fae88f0d5514fbull, 0x35296b3bd3ffbaccull, 0x4d8c207d0f391affull, 0x2cd057e83726b941ull, 0xf1bb4599785b699cull, 0xd6a414ebcc6dc7c1ull, 0x8afd0368d5df9139ull, + 0x1614cc8584c6c682ull, 0xce12af63e979b447ull, 0x268a513c362cb199ull, 0xebce51d1aae78c01ull, 0x5b0f71a66352bc21ull, 0xfe513dd2648b2872ull, 0xe142ebaf2ee35e37ull, 0xac5d966480dc08d5ull, + 0x1d133c9f1ed91b0full, 0xc4aa96d50fec0e8dull, 0x59ca4a63a929e172ull, 0xb30b5c9e79708581ull, 0xc74583963054fd5aull, 0x0aecb6eeda83528cull, 0xd521a8d59a0d9773ull, 0xfabfdee2d6b2d993ull }, { // base nonce 4096 - 0x382ff31a848c87ceull, 0x9f83773ad5a14bf6ull, 0xb256ecebb8fcf4dcull, 0x000c632632ea0cedull, 0xcaf1f89dc457ab50ull, 0x6a3b9f2156b7b00dull, 0x9b428f619265dcfcull, 0x907f65c3591b88c6ull, - 0x0f225df3fbfb67e2ull, 0x29614e20ca52a926ull, 0x4655beaea3ad2759ull, 0xf995b623fcc6644dull, 0xce65301573c94490ull, 0xc7870bc7e5052ee9ull, 0xf7b89744f3b0b132ull, 0x80351dd1981ed5e3ull, - 0xa878aa51b297dcfcull, 0x001a834e5e050e8eull, 0xca2c133d9937349dull, 0x82d3b88dddc886bfull, 0x7ae69bce58a3da0cull, 0x4561f608a0e10777ull, 0x86a12f3d2bb459c9ull, 0x860f5151394991f8ull, - 0xe55b559c5c954cb8ull, 0x4bcbcdbefcaf412dull, 0x1e74dbd57413e73dull, 0x03d197ea39c77502ull, 0xfdff34586270344aull, 0x7e1ff6220cbc0124ull, 0xba28400b90b409d8ull, 0x592cd3eb57e1d660ull + 0xb4b0be3c11586a64ull, 0x924c56c10e0715c8ull, 0xa4f627f711ee801aull, 0x3b714eac31c24d6cull, 0x0876873cfa1abf7cull, 0x46901d0403e71760ull, 0x800200b3b7f6011cull, 0x5f4ddc69c6148d25ull, + 0xb5cb7eba7f8928b9ull, 0xc58b74264346e396ull, 0xe2566c24beaf4c02ull, 0x8c843649ac00da07ull, 0x3ae5fba79913ae34ull, 0x12f99a3701698b6eull, 0xaa1de1cd97326e16ull, 0x86221c6426e264abull, + 0x450585ff15c07cdfull, 0xe58ac64873a2613eull, 0xf537b3ff2abe3faaull, 0x7867e98279d70e30ull, 0x503ac705eb462d5aull, 0xc221cc5691c9dbc4ull, 0xc92cdf77dcd8fca4ull, 0x873bce6930f4e1daull, + 0xc80ef692bbf49e24ull, 0x1c6ac25a60b402edull, 0xae5be74c32c59413ull, 0x84a7efc802f2497full, 0x789fb21ca1d4a4a6ull, 0x796ef675c20d482aull, 0x0dcb663ad2347c5dull, 0x08d02c61a1de7606ull }, { // base nonce 1000000 - 0x99769bd9e253e017ull, 0xda7db4183c7fb68bull, 0xff5782631ce7fa14ull, 0x5c6494df049901faull, 0x3d49b9a6b55f9ee6ull, 0xa7f999e4384da8dbull, 0xd1312b67803a0c72ull, 0x85f5d8f8bb33dc9full, - 0x63664a37b11f311aull, 0x28a4b561cf2f7b36ull, 0x7674177403abf2c8ull, 0xf6ef2c094f5cb4afull, 0xbdc4a803a2e91ff4ull, 0x4459a81585f5f6e0ull, 0xb4098eb87a7489feull, 0x60d9b048e1bbefdeull, - 0xd0aec740e4aba722ull, 0x69d9e3e9c99c5391ull, 0x040fe663cbcbfdc2ull, 0x38e3b8eab6a7b6b4ull, 0x8a606e5c69c02b3full, 0xe1dd929d4296cde3ull, 0x2ad80e84d9072b65ull, 0xa1f34ff68012fd66ull, - 0xa2351892f47fbd27ull, 0xd88d059c58979055ull, 0x0c5d59a61c9c5b0bull, 0xd16f446ddd7119c7ull, 0x47aa1f6c4b48d944ull, 0xf6164e14d2937532ull, 0xd344f8977fd2d100ull, 0xf76f271447d7d772ull + 0x36d2a7c6694899f9ull, 0xe3a69827afe2c802ull, 0x27de29596b337104ull, 0x35f6908a655858d8ull, 0x69c2d88cc9494983ull, 0x274c8e3c25691905ull, 0xe4643e32c6bdd4bdull, 0xb814592665fcaf1dull, + 0xc8856f25adffbb32ull, 0x54e65e1af2ce0a92ull, 0x941b684140d99181ull, 0x9a4df41a22bd6386ull, 0x1c92fcbd298469b8ull, 0x825da611d82ebe4dull, 0x250e717c7813a839ull, 0x84b682df083f9fb8ull, + 0xe74a0443cde9cdd0ull, 0x573837a42cc1e276ull, 0x3bade0c3ba303196ull, 0xf9203e7bc3c7d217ull, 0xeed69b57673b9acbull, 0xb1b022dffd763aefull, 0x2d37b011e5508026ull, 0x514703dacca456d9ull, + 0x6d7fc77b9445a656ull, 0x7ff97c50a072e84bull, 0x9c65865ddef3fd30ull, 0x9b22990afa34c19cull, 0x75b28ae408ef946dull, 0x6647bb9eeaca10e6ull, 0x4b4b8cbf12ce6de1ull, 0x737d8bd3aa6767abull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x13/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x13/vectors.json index b3562c1ef..28f72d9dd 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x13/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x13/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xb359d110ac143375", "0x748fb5308223a682", "0x2a809644b94a8216", "0x18548dad2999d526", "0xb793809331b0a189", "0x55b034de97b5dcfd", "0x9506b188c1becd3c", "0x6f2a3986cb1967b3", - "0x376f13355e35e6c4", "0x35db684678b0567b", "0xfec8f41452c07083", "0x324ad57e71b201e5", "0x1f5def2519b0dff9", "0x07e54a4494f2283d", "0xc698336cb18b866c", "0xc9808c2475fe8d66", - "0x82021978b9d61925", "0x0ef2fa3310887ec6", "0xdb17534bb857c9cc", "0x5203cbc6bdb4bbb2", "0xb0b2b24438cf1cc0", "0xcb1fa6bf5e701935", "0x3dca8b3408c4a3f7", "0xd7610b168cf2943c", - "0xcfe566147a489c75", "0x6294533ee65da77d", "0x2e0774f316868b26", "0xd2a10f4303777610", "0x2e3a4b91c8962246", "0x00063a312aa1f50b", "0x003794aceed11052", "0xcc181405cd575561" + "0x5e04f2a662a5ee43", "0xfe226a51dd3afd9a", "0xf736ad4273733d12", "0x80f4cd86b586f13c", "0xdfda49a7a0e11d97", "0x34e000a92f1c9ab6", "0x71fa206fa17a3813", "0x279bb4d961e951f9", + "0x44b548b4c0109247", "0x14fae88f0d5514fb", "0x35296b3bd3ffbacc", "0x4d8c207d0f391aff", "0x2cd057e83726b941", "0xf1bb4599785b699c", "0xd6a414ebcc6dc7c1", "0x8afd0368d5df9139", + "0x1614cc8584c6c682", "0xce12af63e979b447", "0x268a513c362cb199", "0xebce51d1aae78c01", "0x5b0f71a66352bc21", "0xfe513dd2648b2872", "0xe142ebaf2ee35e37", "0xac5d966480dc08d5", + "0x1d133c9f1ed91b0f", "0xc4aa96d50fec0e8d", "0x59ca4a63a929e172", "0xb30b5c9e79708581", "0xc74583963054fd5a", "0x0aecb6eeda83528c", "0xd521a8d59a0d9773", "0xfabfdee2d6b2d993" ]}, {"base_nonce": 4096, "expected": [ - "0x382ff31a848c87ce", "0x9f83773ad5a14bf6", "0xb256ecebb8fcf4dc", "0x000c632632ea0ced", "0xcaf1f89dc457ab50", "0x6a3b9f2156b7b00d", "0x9b428f619265dcfc", "0x907f65c3591b88c6", - "0x0f225df3fbfb67e2", "0x29614e20ca52a926", "0x4655beaea3ad2759", "0xf995b623fcc6644d", "0xce65301573c94490", "0xc7870bc7e5052ee9", "0xf7b89744f3b0b132", "0x80351dd1981ed5e3", - "0xa878aa51b297dcfc", "0x001a834e5e050e8e", "0xca2c133d9937349d", "0x82d3b88dddc886bf", "0x7ae69bce58a3da0c", "0x4561f608a0e10777", "0x86a12f3d2bb459c9", "0x860f5151394991f8", - "0xe55b559c5c954cb8", "0x4bcbcdbefcaf412d", "0x1e74dbd57413e73d", "0x03d197ea39c77502", "0xfdff34586270344a", "0x7e1ff6220cbc0124", "0xba28400b90b409d8", "0x592cd3eb57e1d660" + "0xb4b0be3c11586a64", "0x924c56c10e0715c8", "0xa4f627f711ee801a", "0x3b714eac31c24d6c", "0x0876873cfa1abf7c", "0x46901d0403e71760", "0x800200b3b7f6011c", "0x5f4ddc69c6148d25", + "0xb5cb7eba7f8928b9", "0xc58b74264346e396", "0xe2566c24beaf4c02", "0x8c843649ac00da07", "0x3ae5fba79913ae34", "0x12f99a3701698b6e", "0xaa1de1cd97326e16", "0x86221c6426e264ab", + "0x450585ff15c07cdf", "0xe58ac64873a2613e", "0xf537b3ff2abe3faa", "0x7867e98279d70e30", "0x503ac705eb462d5a", "0xc221cc5691c9dbc4", "0xc92cdf77dcd8fca4", "0x873bce6930f4e1da", + "0xc80ef692bbf49e24", "0x1c6ac25a60b402ed", "0xae5be74c32c59413", "0x84a7efc802f2497f", "0x789fb21ca1d4a4a6", "0x796ef675c20d482a", "0x0dcb663ad2347c5d", "0x08d02c61a1de7606" ]}, {"base_nonce": 1000000, "expected": [ - "0x99769bd9e253e017", "0xda7db4183c7fb68b", "0xff5782631ce7fa14", "0x5c6494df049901fa", "0x3d49b9a6b55f9ee6", "0xa7f999e4384da8db", "0xd1312b67803a0c72", "0x85f5d8f8bb33dc9f", - "0x63664a37b11f311a", "0x28a4b561cf2f7b36", "0x7674177403abf2c8", "0xf6ef2c094f5cb4af", "0xbdc4a803a2e91ff4", "0x4459a81585f5f6e0", "0xb4098eb87a7489fe", "0x60d9b048e1bbefde", - "0xd0aec740e4aba722", "0x69d9e3e9c99c5391", "0x040fe663cbcbfdc2", "0x38e3b8eab6a7b6b4", "0x8a606e5c69c02b3f", "0xe1dd929d4296cde3", "0x2ad80e84d9072b65", "0xa1f34ff68012fd66", - "0xa2351892f47fbd27", "0xd88d059c58979055", "0x0c5d59a61c9c5b0b", "0xd16f446ddd7119c7", "0x47aa1f6c4b48d944", "0xf6164e14d2937532", "0xd344f8977fd2d100", "0xf76f271447d7d772" + "0x36d2a7c6694899f9", "0xe3a69827afe2c802", "0x27de29596b337104", "0x35f6908a655858d8", "0x69c2d88cc9494983", "0x274c8e3c25691905", "0xe4643e32c6bdd4bd", "0xb814592665fcaf1d", + "0xc8856f25adffbb32", "0x54e65e1af2ce0a92", "0x941b684140d99181", "0x9a4df41a22bd6386", "0x1c92fcbd298469b8", "0x825da611d82ebe4d", "0x250e717c7813a839", "0x84b682df083f9fb8", + "0xe74a0443cde9cdd0", "0x573837a42cc1e276", "0x3bade0c3ba303196", "0xf9203e7bc3c7d217", "0xeed69b57673b9acb", "0xb1b022dffd763aef", "0x2d37b011e5508026", "0x514703dacca456d9", + "0x6d7fc77b9445a656", "0x7ff97c50a072e84b", "0x9c65865ddef3fd30", "0x9b22990afa34c19c", "0x75b28ae408ef946d", "0x6647bb9eeaca10e6", "0x4b4b8cbf12ce6de1", "0x737d8bd3aa6767ab" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cl index 8d5ca53aa..5212c2aa0 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cu index c56c8d003..1811a7590 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x2/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cl index b98be4e5f..40c0abff5 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cu index a21c99632..c20159b89 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x2/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/program.json b/proto-cuda/packs-ca3-shadow/sh256x2/program.json index f614ebbe1..4fb063297 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x2/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/program.metal b/proto-cuda/packs-ca3-shadow/sh256x2/program.metal index 654862e09..a9c76069a 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x2/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x2/program_bound.metal index 976bdef5c..56c2b1217 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x2/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x2/vectors.h index aac6ba40e..5388824ac 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x2/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x04e491e95153d0c0ull, 0x4c42169e1e0b8105ull, 0x0d90a3f13ae112f5ull, 0x7655b613a9d5c4a1ull, 0x175f062319f0c695ull, 0x03353125cf0b0b99ull, 0xf7b735876b46c7c6ull, 0x8237cad948b448ffull, - 0x7e3457c2012f86a1ull, 0xd263e7d83b4bcf46ull, 0x59a40a1e54938c0dull, 0x1b9d1ce89913ead7ull, 0xfb61039aba89f77cull, 0x72e74850db581418ull, 0x3b3ba880375afd7bull, 0xa272b7c295b800d6ull, - 0xe5170a8eb49dc9a4ull, 0x9a09fef0590c4f68ull, 0xe339e58d335c62b1ull, 0xbbe4dcd67ef024e4ull, 0xb58d47107235fc41ull, 0x74fb7ba7185593c2ull, 0xc748f87aa4be1db6ull, 0xd3145c4e1af3852cull, - 0x2dc5b295462aa440ull, 0xd4c1f90dd516b1deull, 0xdf3749272aaa156bull, 0x5b975060e5e9ee08ull, 0x19aa57c02ff889d2ull, 0x86bf447f041aa78bull, 0x51a9bf4b0e40016aull, 0xf4cc02d0f2be1e30ull + 0xeed0aaa8c875a81cull, 0x8fd1962216b3516aull, 0xd625a5c4ae6b090eull, 0x637f4c1f4b113f0full, 0x30a517daaf1401e4ull, 0x21d805bc223df268ull, 0x520a9c2d40956d0eull, 0xb92bd5fb3339f6deull, + 0x5a0deb23e2eea0c7ull, 0x6fd799a057893a01ull, 0xc29d9c586d515ad7ull, 0xaba72863040a6c88ull, 0x8aa61065cfc2f6a6ull, 0x8879b9f0122e2a1dull, 0x322b8ba37c9dd1f6ull, 0xac1f70366649900dull, + 0xe4e965ac8348a1c6ull, 0xb8fec9763ccd6e84ull, 0x1ddd79224fe2d798ull, 0xc18154f52c37dc4full, 0x599ff3aea26add17ull, 0x4aa0ad827d84700eull, 0x5afa7ba898a5e581ull, 0x250e3d26d1f713b6ull, + 0xab8b5843abbf0a1bull, 0x06295eb8cdd68dcaull, 0x8a604b404d1831cbull, 0x84c26782fc3d0655ull, 0xd5d5a4c5baaeab87ull, 0xe79f44de60b1230bull, 0x6dbef1c3ec820084ull, 0x2e9e5d205b88da52ull }, { // base nonce 4096 - 0xfa09e795bcf4cc16ull, 0x74a0400fc0d4dd31ull, 0x18aca4406173e8b4ull, 0x3a20caf44908e583ull, 0x6fdfd9cf0198f91aull, 0x96d3c284b0e23363ull, 0x2d0237e263af2f32ull, 0xc44c5d56ddb5492eull, - 0xf862e9bb6fb96d29ull, 0x1679aa2bf73dd7f6ull, 0x123bd29e9e98b2a7ull, 0x7a2bf08712d1f05aull, 0x13eef78a31863d73ull, 0xb2c3d02ef4751a6full, 0x264c88bd8165d431ull, 0x9a1c44a5dd2f4a5dull, - 0xb2d647e692987978ull, 0x8f7fe312b703f739ull, 0x359ea150a66f254cull, 0x7432685b3fa426f6ull, 0x9fbf8c15aff45253ull, 0x30a58e634bd3e321ull, 0x68b90886acfd416cull, 0xe3bcbe6f0477291bull, - 0x33d0e37352364c88ull, 0xa69355a1e959fab7ull, 0x1f4da9c95e497dcfull, 0x66d1a41ad8b76ed9ull, 0x888cfa862362596cull, 0xdf64b72bd1469706ull, 0x29aebe5f9290a5afull, 0x426640cc3a300384ull + 0x26824b2d1e14a4abull, 0xd3a87418563cb4b9ull, 0x39dff66300ab5f1bull, 0xcc507255ffa0ec5aull, 0x031ad8efd2e47b27ull, 0x7635bc88e9ed3ee1ull, 0x73aea0055fd96691ull, 0xcc56c029d6aff931ull, + 0xfe79b398e363efddull, 0x1a10b34c890af966ull, 0xd11141d356588affull, 0x09dcf93810b3d8b7ull, 0x87b581a9be6f549cull, 0x0e927749f371070full, 0xe5e5e1c1e3320404ull, 0x3d3c8bd899d2316bull, + 0x9225c1920f8383efull, 0x3663e535ca589d18ull, 0xa8a0a2cc3c234908ull, 0xd564fc6989e26261ull, 0x15d2cce02d61c97bull, 0xdd541a3eb8dcdf68ull, 0xe5303c9cf3290d8dull, 0x8342df4aabc6eb1full, + 0xb76b6f61a9776055ull, 0x89627ea126fb5f6cull, 0xa77cf8cbfcf4aec9ull, 0x2f3ae1253d0abc4full, 0xbbecb52544f8745dull, 0x56a26c8206d842b4ull, 0x3205c2d2638130ddull, 0x3a7bffcf8b10045aull }, { // base nonce 1000000 - 0x3085acf29175f955ull, 0x71fce956fef7c0dcull, 0xd65f7f4f7b5da589ull, 0xf453369353c73bb8ull, 0x28e13e24ae8d9f89ull, 0xd7a3594113498879ull, 0x8f1f8db45dd80ee6ull, 0x847d40b7357ca8ebull, - 0xa199177bc3f7f7a3ull, 0x26e92f6b2077b4d4ull, 0x24f9f1863917dcbcull, 0x1a030d008b777b08ull, 0xebcc0cc9db7c412eull, 0xebb9e3bfa513b0c0ull, 0x5acf6325ac29d53bull, 0xc36c4c199faf1234ull, - 0xacff161df7f202a1ull, 0x2805c39d5bbfb402ull, 0xc3b49f0eda801af6ull, 0x669fa3adaf9cecfeull, 0x9d2b9f502941f5a6ull, 0x18f6d5ad37784f60ull, 0x4cc22b6763f00357ull, 0x9a600deb62c80c0aull, - 0x9ee7ff942eb3d51full, 0x465c74e3f9c48c0eull, 0xa3e54e42f498cfe7ull, 0x3e2ed6c098a6fd94ull, 0x3a3116c0b3eda0b6ull, 0x39b64b349ca5f65eull, 0x4529d689581f15e5ull, 0x4a000068b04c79c2ull + 0x1cb50ce85b39b6e2ull, 0x2db3f37c9a6b7990ull, 0x81d5a4d21cc02d96ull, 0xfc2c73051ddae3acull, 0xa0a4c483506bc576ull, 0x54add3c8ad92e765ull, 0x45a633fdb00eee22ull, 0x17206cd279b3278eull, + 0xe96d70ae3ad68a64ull, 0xb732d0cd24aa90e0ull, 0x205ed045a0182c77ull, 0x90db182ead7e2c15ull, 0xc31d60196079d9b5ull, 0x456c8820ffa56453ull, 0x9d0f201e3be297b1ull, 0x2947fe8cdb42b1a5ull, + 0x5ac7f03f12c5b151ull, 0x4ba48097c3908319ull, 0xbb6891bfdc7b283bull, 0x083374c3398a59fdull, 0x48f22c90fa33ced1ull, 0x3f373118dcf06bd6ull, 0xc15c5690ff20047aull, 0xcdb88781e748967cull, + 0x8938bf5f7d8e7c22ull, 0xfaf9eed57785e748ull, 0x6ae3b444aa611fa7ull, 0xd9e8bd0d4e5fb26eull, 0xa1db1078718d0b3dull, 0x638c86a796180bd0ull, 0x9f73d45e5061603dull, 0x609a8d515b1f71f2ull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x2/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x2/vectors.json index e6516b9db..b94871e0b 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x2/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x2/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x04e491e95153d0c0", "0x4c42169e1e0b8105", "0x0d90a3f13ae112f5", "0x7655b613a9d5c4a1", "0x175f062319f0c695", "0x03353125cf0b0b99", "0xf7b735876b46c7c6", "0x8237cad948b448ff", - "0x7e3457c2012f86a1", "0xd263e7d83b4bcf46", "0x59a40a1e54938c0d", "0x1b9d1ce89913ead7", "0xfb61039aba89f77c", "0x72e74850db581418", "0x3b3ba880375afd7b", "0xa272b7c295b800d6", - "0xe5170a8eb49dc9a4", "0x9a09fef0590c4f68", "0xe339e58d335c62b1", "0xbbe4dcd67ef024e4", "0xb58d47107235fc41", "0x74fb7ba7185593c2", "0xc748f87aa4be1db6", "0xd3145c4e1af3852c", - "0x2dc5b295462aa440", "0xd4c1f90dd516b1de", "0xdf3749272aaa156b", "0x5b975060e5e9ee08", "0x19aa57c02ff889d2", "0x86bf447f041aa78b", "0x51a9bf4b0e40016a", "0xf4cc02d0f2be1e30" + "0xeed0aaa8c875a81c", "0x8fd1962216b3516a", "0xd625a5c4ae6b090e", "0x637f4c1f4b113f0f", "0x30a517daaf1401e4", "0x21d805bc223df268", "0x520a9c2d40956d0e", "0xb92bd5fb3339f6de", + "0x5a0deb23e2eea0c7", "0x6fd799a057893a01", "0xc29d9c586d515ad7", "0xaba72863040a6c88", "0x8aa61065cfc2f6a6", "0x8879b9f0122e2a1d", "0x322b8ba37c9dd1f6", "0xac1f70366649900d", + "0xe4e965ac8348a1c6", "0xb8fec9763ccd6e84", "0x1ddd79224fe2d798", "0xc18154f52c37dc4f", "0x599ff3aea26add17", "0x4aa0ad827d84700e", "0x5afa7ba898a5e581", "0x250e3d26d1f713b6", + "0xab8b5843abbf0a1b", "0x06295eb8cdd68dca", "0x8a604b404d1831cb", "0x84c26782fc3d0655", "0xd5d5a4c5baaeab87", "0xe79f44de60b1230b", "0x6dbef1c3ec820084", "0x2e9e5d205b88da52" ]}, {"base_nonce": 4096, "expected": [ - "0xfa09e795bcf4cc16", "0x74a0400fc0d4dd31", "0x18aca4406173e8b4", "0x3a20caf44908e583", "0x6fdfd9cf0198f91a", "0x96d3c284b0e23363", "0x2d0237e263af2f32", "0xc44c5d56ddb5492e", - "0xf862e9bb6fb96d29", "0x1679aa2bf73dd7f6", "0x123bd29e9e98b2a7", "0x7a2bf08712d1f05a", "0x13eef78a31863d73", "0xb2c3d02ef4751a6f", "0x264c88bd8165d431", "0x9a1c44a5dd2f4a5d", - "0xb2d647e692987978", "0x8f7fe312b703f739", "0x359ea150a66f254c", "0x7432685b3fa426f6", "0x9fbf8c15aff45253", "0x30a58e634bd3e321", "0x68b90886acfd416c", "0xe3bcbe6f0477291b", - "0x33d0e37352364c88", "0xa69355a1e959fab7", "0x1f4da9c95e497dcf", "0x66d1a41ad8b76ed9", "0x888cfa862362596c", "0xdf64b72bd1469706", "0x29aebe5f9290a5af", "0x426640cc3a300384" + "0x26824b2d1e14a4ab", "0xd3a87418563cb4b9", "0x39dff66300ab5f1b", "0xcc507255ffa0ec5a", "0x031ad8efd2e47b27", "0x7635bc88e9ed3ee1", "0x73aea0055fd96691", "0xcc56c029d6aff931", + "0xfe79b398e363efdd", "0x1a10b34c890af966", "0xd11141d356588aff", "0x09dcf93810b3d8b7", "0x87b581a9be6f549c", "0x0e927749f371070f", "0xe5e5e1c1e3320404", "0x3d3c8bd899d2316b", + "0x9225c1920f8383ef", "0x3663e535ca589d18", "0xa8a0a2cc3c234908", "0xd564fc6989e26261", "0x15d2cce02d61c97b", "0xdd541a3eb8dcdf68", "0xe5303c9cf3290d8d", "0x8342df4aabc6eb1f", + "0xb76b6f61a9776055", "0x89627ea126fb5f6c", "0xa77cf8cbfcf4aec9", "0x2f3ae1253d0abc4f", "0xbbecb52544f8745d", "0x56a26c8206d842b4", "0x3205c2d2638130dd", "0x3a7bffcf8b10045a" ]}, {"base_nonce": 1000000, "expected": [ - "0x3085acf29175f955", "0x71fce956fef7c0dc", "0xd65f7f4f7b5da589", "0xf453369353c73bb8", "0x28e13e24ae8d9f89", "0xd7a3594113498879", "0x8f1f8db45dd80ee6", "0x847d40b7357ca8eb", - "0xa199177bc3f7f7a3", "0x26e92f6b2077b4d4", "0x24f9f1863917dcbc", "0x1a030d008b777b08", "0xebcc0cc9db7c412e", "0xebb9e3bfa513b0c0", "0x5acf6325ac29d53b", "0xc36c4c199faf1234", - "0xacff161df7f202a1", "0x2805c39d5bbfb402", "0xc3b49f0eda801af6", "0x669fa3adaf9cecfe", "0x9d2b9f502941f5a6", "0x18f6d5ad37784f60", "0x4cc22b6763f00357", "0x9a600deb62c80c0a", - "0x9ee7ff942eb3d51f", "0x465c74e3f9c48c0e", "0xa3e54e42f498cfe7", "0x3e2ed6c098a6fd94", "0x3a3116c0b3eda0b6", "0x39b64b349ca5f65e", "0x4529d689581f15e5", "0x4a000068b04c79c2" + "0x1cb50ce85b39b6e2", "0x2db3f37c9a6b7990", "0x81d5a4d21cc02d96", "0xfc2c73051ddae3ac", "0xa0a4c483506bc576", "0x54add3c8ad92e765", "0x45a633fdb00eee22", "0x17206cd279b3278e", + "0xe96d70ae3ad68a64", "0xb732d0cd24aa90e0", "0x205ed045a0182c77", "0x90db182ead7e2c15", "0xc31d60196079d9b5", "0x456c8820ffa56453", "0x9d0f201e3be297b1", "0x2947fe8cdb42b1a5", + "0x5ac7f03f12c5b151", "0x4ba48097c3908319", "0xbb6891bfdc7b283b", "0x083374c3398a59fd", "0x48f22c90fa33ced1", "0x3f373118dcf06bd6", "0xc15c5690ff20047a", "0xcdb88781e748967c", + "0x8938bf5f7d8e7c22", "0xfaf9eed57785e748", "0x6ae3b444aa611fa7", "0xd9e8bd0d4e5fb26e", "0xa1db1078718d0b3d", "0x638c86a796180bd0", "0x9f73d45e5061603d", "0x609a8d515b1f71f2" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cl index 72f7ca4d0..6d4a2b172 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cu index 62d29f6ff..df227c3fc 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x27/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cl index 02546cd07..f4a010f8b 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cu index 4a823531b..038c42c93 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x27/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/program.json b/proto-cuda/packs-ca3-shadow/sh256x27/program.json index 8588e0fe9..a4c1fe380 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x27/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/program.metal b/proto-cuda/packs-ca3-shadow/sh256x27/program.metal index 2830702a7..0a3b8b77a 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x27/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x27/program_bound.metal index 7a8da2d3e..48aed4d37 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x27/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x27/vectors.h index 17ce44606..b299bc00d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x27/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x2576769ee4a14c8dull, 0x6408f60b1f606a96ull, 0x8e1825542dbd3636ull, 0xb25c17d8820ae079ull, 0xb6e1a578d06323b2ull, 0x8bea2965eaa47f55ull, 0x3684da53df965532ull, 0x3392668d50a45aadull, - 0x5e78d14aaaadce6eull, 0xcb0a7992844c9192ull, 0xfe4ad7fbc328f9efull, 0x7e64515d7d5941a4ull, 0x425e4eedb7b0ca4bull, 0x4f57a8f93ce317b8ull, 0x081360e3cf765b3aull, 0x1e9e919c50331254ull, - 0x998e7a76718adcbaull, 0xde5600e2b1838d9full, 0x4f85d0539779a267ull, 0x40661123ffbce40cull, 0x95b247ca86ff61dcull, 0xbe2bf61b9fcd1362ull, 0xfd6d6687a07997daull, 0x9935965e43f25045ull, - 0x27fe1552873c0b40ull, 0x972c952c83cf5ea9ull, 0x525b975fb9610333ull, 0x4f81431408d27e2dull, 0x6375d14f804f061full, 0xff6492be48775872ull, 0x81b2e098e1a01f8full, 0xc58ddcb717dd3370ull + 0xdfbc8db1c06dacd8ull, 0xd56061f5411cc2cfull, 0x66c9911a020ba1e5ull, 0xc8b93c36c4c7a2a6ull, 0xac045e8343ea2521ull, 0x5cdddf6fc438de8bull, 0xad88eea3ea678e28ull, 0x6fbc5b7160399767ull, + 0x8073ccabd0764f0cull, 0x0e32bd34d9f4cd5full, 0x7d23625bccd7703bull, 0x481c64f93034050aull, 0x4d2493acc84787cfull, 0x853490ed669c5c6aull, 0x4e3b6fc3a3e9f661ull, 0xc87a8caad36cb1daull, + 0xd592f24a236b35d8ull, 0xbf8fceb08aa32461ull, 0xd174d9f2943500f2ull, 0xe5127777dd2876b0ull, 0xd709d6bdcc633059ull, 0xaa30a9b82f58568full, 0x1b05070b769f1f6cull, 0xfffc24d3fb2a74eeull, + 0x3c1187b38d01ba95ull, 0x90ef34ea51d4eb79ull, 0xfe124596a63bf602ull, 0x9ad0ff64e27608aeull, 0x7d4f699998541fb9ull, 0xc142eb65cadaaabaull, 0x7a73a36d7faedaa9ull, 0xb92715f32b721587ull }, { // base nonce 4096 - 0x1ce77a600ec573b4ull, 0xb126a41f83521e45ull, 0x875547a82d6145fcull, 0xd4b04bf258ce4941ull, 0xe24c23e2b2371ad6ull, 0x7687a4beddbbd270ull, 0x63b9346ba234a0beull, 0x2500fb30f5e7eb20ull, - 0x7a185d59a30e3333ull, 0xa3c14cec7e2bcce2ull, 0x5730e39d367c6b21ull, 0x03e10c84ac832a3full, 0xf6dd88e0208019efull, 0xd539425d3bc497fcull, 0x71461f5d0c23f626ull, 0xa4c64db97fb4a425ull, - 0x61f56436538b61f8ull, 0x749b10eccde2f0bcull, 0xbe447d39b5f3aa29ull, 0x0e4ada60a90088b7ull, 0x3eda0e2db0bc9f9eull, 0xf90d81a21a10089cull, 0x7cf50a8f14d2430eull, 0x14601dea6a5d8625ull, - 0x23c448ee2f31a26dull, 0x60e5c3d4b218c0c2ull, 0x46ed8a924ac431fbull, 0xcc77440ffbe5c23dull, 0x9a15a2da9d6ba946ull, 0x37117ce37ca8c606ull, 0x69b85ea283597190ull, 0x03600a05ffba0055ull + 0x433afad2164a8ddaull, 0x1fc487979b4dffb2ull, 0xbaf10a7e22b67b7dull, 0xe2f4c61b908c014aull, 0x8d588a69173db01full, 0x334c34ae7d8da448ull, 0xabf638cea27cf935ull, 0x06e3d4a1d6e0fbeeull, + 0xec3d53a3ecf99e86ull, 0x78987c6911255367ull, 0xbbc9c743d9576be5ull, 0x43d622ee7ed30a35ull, 0x339860b0560c988cull, 0x347fba26cb169315ull, 0xd510af804aa26d21ull, 0x5c3ca3e10e783ff8ull, + 0xc806f8afa12a937aull, 0xb6213f67b09846a2ull, 0xd875236923df5af6ull, 0x760e944b06c76d50ull, 0x87c2740caf1a4c63ull, 0xb80f96fe2edc6e9bull, 0xad6b33f2e4158ebeull, 0xac291295afd15709ull, + 0x33236c6ca9918da3ull, 0xc7365c50ce60c222ull, 0x53f84641982af8c6ull, 0xd6ada09dbb253a7bull, 0xab39a0bb6f49d28bull, 0xdf0d63f31cb955ecull, 0xe18f65eb0b5ccb6bull, 0x207c50f288cbb677ull }, { // base nonce 1000000 - 0x6b390e64bbdd91ceull, 0x9b34dd7b05214a6bull, 0x60c14bcda3df2768ull, 0x557f5df495f92ad5ull, 0x5ac883b3090f344bull, 0xdec4058df6f8b088ull, 0x6e3dcb56bbb79ec9ull, 0x6450bb96c6c686bdull, - 0xc2021c81ef714e23ull, 0xcc0b3f77c0cf7bf6ull, 0x03cb474759279b0dull, 0x93cf69a5cd961b9cull, 0x61318f0c14d7e3deull, 0x9df2144c49b171beull, 0xa335ecfaf465e9cdull, 0x4f8661257c1706c3ull, - 0xab374ea37f8e253cull, 0x117242d65e8ebdb4ull, 0x9022069313586cd7ull, 0xe97f096510d6ad03ull, 0xa93d76b12894ffc5ull, 0x7823119022da1590ull, 0xde6f389ece0c83e9ull, 0x84e97ea778e4fb15ull, - 0x23d0802d386a21c8ull, 0xbaacd8512e9bbb31ull, 0x10522970c58234bbull, 0x90f0b64b38eed0b1ull, 0xb250988d2986d15bull, 0xf81e101bb298710full, 0x20e9cca5ade09113ull, 0x91c944d603539c62ull + 0x4ffd090a02db43b4ull, 0x3df015d557eb7dffull, 0xb11e898d6f219179ull, 0x0ffff9c4715ea693ull, 0xc51e5ab1fff3e42dull, 0x3cbe173c74768e58ull, 0x0bc9c3d99d9082dcull, 0x190b0881a508b8b4ull, + 0x38e7b4a21c3c7d18ull, 0x34aa4afba0dfc716ull, 0x4a8f8a8027f08cd6ull, 0xe7ab045630e34a7eull, 0xa2bdea296316ac03ull, 0xdc85eb2818449894ull, 0xecf5cc78cb02cb05ull, 0xab138a76db952f3eull, + 0xf625a5704aab7146ull, 0x927d175dd5de47fcull, 0x249aedcf78d89c84ull, 0x66da14f5abee33faull, 0x8584faba12d0e357ull, 0xc1906204df361c55ull, 0x7eb470a084fc181dull, 0x74c114faf8ece5cfull, + 0xd15cb62a0e1eda86ull, 0x8ba7f1a7ab236d41ull, 0xfda39d1b301db5f5ull, 0x4a008ea52f3c438bull, 0x7b5486d62e2bbb45ull, 0x05440eaf2d1168a2ull, 0x0299a1d3e6c9e4e7ull, 0x60308a0e058e1e29ull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x27/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x27/vectors.json index c481669bf..fe8e9e0f7 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x27/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x27/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x2576769ee4a14c8d", "0x6408f60b1f606a96", "0x8e1825542dbd3636", "0xb25c17d8820ae079", "0xb6e1a578d06323b2", "0x8bea2965eaa47f55", "0x3684da53df965532", "0x3392668d50a45aad", - "0x5e78d14aaaadce6e", "0xcb0a7992844c9192", "0xfe4ad7fbc328f9ef", "0x7e64515d7d5941a4", "0x425e4eedb7b0ca4b", "0x4f57a8f93ce317b8", "0x081360e3cf765b3a", "0x1e9e919c50331254", - "0x998e7a76718adcba", "0xde5600e2b1838d9f", "0x4f85d0539779a267", "0x40661123ffbce40c", "0x95b247ca86ff61dc", "0xbe2bf61b9fcd1362", "0xfd6d6687a07997da", "0x9935965e43f25045", - "0x27fe1552873c0b40", "0x972c952c83cf5ea9", "0x525b975fb9610333", "0x4f81431408d27e2d", "0x6375d14f804f061f", "0xff6492be48775872", "0x81b2e098e1a01f8f", "0xc58ddcb717dd3370" + "0xdfbc8db1c06dacd8", "0xd56061f5411cc2cf", "0x66c9911a020ba1e5", "0xc8b93c36c4c7a2a6", "0xac045e8343ea2521", "0x5cdddf6fc438de8b", "0xad88eea3ea678e28", "0x6fbc5b7160399767", + "0x8073ccabd0764f0c", "0x0e32bd34d9f4cd5f", "0x7d23625bccd7703b", "0x481c64f93034050a", "0x4d2493acc84787cf", "0x853490ed669c5c6a", "0x4e3b6fc3a3e9f661", "0xc87a8caad36cb1da", + "0xd592f24a236b35d8", "0xbf8fceb08aa32461", "0xd174d9f2943500f2", "0xe5127777dd2876b0", "0xd709d6bdcc633059", "0xaa30a9b82f58568f", "0x1b05070b769f1f6c", "0xfffc24d3fb2a74ee", + "0x3c1187b38d01ba95", "0x90ef34ea51d4eb79", "0xfe124596a63bf602", "0x9ad0ff64e27608ae", "0x7d4f699998541fb9", "0xc142eb65cadaaaba", "0x7a73a36d7faedaa9", "0xb92715f32b721587" ]}, {"base_nonce": 4096, "expected": [ - "0x1ce77a600ec573b4", "0xb126a41f83521e45", "0x875547a82d6145fc", "0xd4b04bf258ce4941", "0xe24c23e2b2371ad6", "0x7687a4beddbbd270", "0x63b9346ba234a0be", "0x2500fb30f5e7eb20", - "0x7a185d59a30e3333", "0xa3c14cec7e2bcce2", "0x5730e39d367c6b21", "0x03e10c84ac832a3f", "0xf6dd88e0208019ef", "0xd539425d3bc497fc", "0x71461f5d0c23f626", "0xa4c64db97fb4a425", - "0x61f56436538b61f8", "0x749b10eccde2f0bc", "0xbe447d39b5f3aa29", "0x0e4ada60a90088b7", "0x3eda0e2db0bc9f9e", "0xf90d81a21a10089c", "0x7cf50a8f14d2430e", "0x14601dea6a5d8625", - "0x23c448ee2f31a26d", "0x60e5c3d4b218c0c2", "0x46ed8a924ac431fb", "0xcc77440ffbe5c23d", "0x9a15a2da9d6ba946", "0x37117ce37ca8c606", "0x69b85ea283597190", "0x03600a05ffba0055" + "0x433afad2164a8dda", "0x1fc487979b4dffb2", "0xbaf10a7e22b67b7d", "0xe2f4c61b908c014a", "0x8d588a69173db01f", "0x334c34ae7d8da448", "0xabf638cea27cf935", "0x06e3d4a1d6e0fbee", + "0xec3d53a3ecf99e86", "0x78987c6911255367", "0xbbc9c743d9576be5", "0x43d622ee7ed30a35", "0x339860b0560c988c", "0x347fba26cb169315", "0xd510af804aa26d21", "0x5c3ca3e10e783ff8", + "0xc806f8afa12a937a", "0xb6213f67b09846a2", "0xd875236923df5af6", "0x760e944b06c76d50", "0x87c2740caf1a4c63", "0xb80f96fe2edc6e9b", "0xad6b33f2e4158ebe", "0xac291295afd15709", + "0x33236c6ca9918da3", "0xc7365c50ce60c222", "0x53f84641982af8c6", "0xd6ada09dbb253a7b", "0xab39a0bb6f49d28b", "0xdf0d63f31cb955ec", "0xe18f65eb0b5ccb6b", "0x207c50f288cbb677" ]}, {"base_nonce": 1000000, "expected": [ - "0x6b390e64bbdd91ce", "0x9b34dd7b05214a6b", "0x60c14bcda3df2768", "0x557f5df495f92ad5", "0x5ac883b3090f344b", "0xdec4058df6f8b088", "0x6e3dcb56bbb79ec9", "0x6450bb96c6c686bd", - "0xc2021c81ef714e23", "0xcc0b3f77c0cf7bf6", "0x03cb474759279b0d", "0x93cf69a5cd961b9c", "0x61318f0c14d7e3de", "0x9df2144c49b171be", "0xa335ecfaf465e9cd", "0x4f8661257c1706c3", - "0xab374ea37f8e253c", "0x117242d65e8ebdb4", "0x9022069313586cd7", "0xe97f096510d6ad03", "0xa93d76b12894ffc5", "0x7823119022da1590", "0xde6f389ece0c83e9", "0x84e97ea778e4fb15", - "0x23d0802d386a21c8", "0xbaacd8512e9bbb31", "0x10522970c58234bb", "0x90f0b64b38eed0b1", "0xb250988d2986d15b", "0xf81e101bb298710f", "0x20e9cca5ade09113", "0x91c944d603539c62" + "0x4ffd090a02db43b4", "0x3df015d557eb7dff", "0xb11e898d6f219179", "0x0ffff9c4715ea693", "0xc51e5ab1fff3e42d", "0x3cbe173c74768e58", "0x0bc9c3d99d9082dc", "0x190b0881a508b8b4", + "0x38e7b4a21c3c7d18", "0x34aa4afba0dfc716", "0x4a8f8a8027f08cd6", "0xe7ab045630e34a7e", "0xa2bdea296316ac03", "0xdc85eb2818449894", "0xecf5cc78cb02cb05", "0xab138a76db952f3e", + "0xf625a5704aab7146", "0x927d175dd5de47fc", "0x249aedcf78d89c84", "0x66da14f5abee33fa", "0x8584faba12d0e357", "0xc1906204df361c55", "0x7eb470a084fc181d", "0x74c114faf8ece5cf", + "0xd15cb62a0e1eda86", "0x8ba7f1a7ab236d41", "0xfda39d1b301db5f5", "0x4a008ea52f3c438b", "0x7b5486d62e2bbb45", "0x05440eaf2d1168a2", "0x0299a1d3e6c9e4e7", "0x60308a0e058e1e29" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cl index 776a24c7f..a12b6903a 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cu index 41461c8dd..7c3da10e4 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x40/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cl index a4c319201..94b20b7b5 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cu index 3d97c4eef..bcc5a9149 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x40/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/program.json b/proto-cuda/packs-ca3-shadow/sh256x40/program.json index 91c8f62b2..ebe2a9edf 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x40/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/program.metal b/proto-cuda/packs-ca3-shadow/sh256x40/program.metal index aef8058fb..0bdda5d2d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x40/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x40/program_bound.metal index 662225c59..45f0ed86c 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x40/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x40/vectors.h index aa6a964ab..f57a8fed0 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x40/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x8b33d5c60f0e3fe5ull, 0xe7edd93c9eae6505ull, 0x99381f4d81c722ceull, 0xd817d5d01693d9a7ull, 0x473d0bad742a6609ull, 0xd75c29c497cab02aull, 0xa0db8f5aaca58cceull, 0xc4de295193e75862ull, - 0x1d2deb87726a3503ull, 0x36ed34ba8370eac0ull, 0x689b5ddaae423450ull, 0x6507132e18ef25b0ull, 0xca4892dafa48ab61ull, 0x26b39a0a8d7583f0ull, 0xbcf46e4d6e4341a5ull, 0xdbe9237704a4b8bcull, - 0x6fb724f6807cac26ull, 0xb48986723b644466ull, 0xa8958ab2c831dbdcull, 0x1095bb8955a0a48eull, 0x6fde063371fad10eull, 0x01420d707cfb6e57ull, 0x9ef8e88c4c35736aull, 0x92607050d08b24e8ull, - 0xab117dfce555499eull, 0xbd480c8ceee753baull, 0x6a9a73bb40b9801aull, 0x4bcf4bc90fc9a717ull, 0xbe2ecde94eba586dull, 0x50e5397b12ec1613ull, 0xa33764874745d040ull, 0x47d202c031c1ca74ull + 0x5179a95dd5733f10ull, 0x63a462b0c710bcadull, 0x5d2e6023819b9793ull, 0x6f95d8931cc61b17ull, 0xaec76ffb955baa1cull, 0xe737ad39963a091dull, 0xc14aef1f0a8490b1ull, 0x960b14c3824ee067ull, + 0x5e630fadbb007d3cull, 0x3bddc2bd3a29133dull, 0x8a34fdeb41300bb5ull, 0x35203796b392eeaeull, 0x2b9ac1b72859d002ull, 0x233f790e76e3dad2ull, 0x99e7ac44571f8fdcull, 0xd32a65caad0dc5f4ull, + 0x1cefadd2f1b2740cull, 0xe508d4663fe52f10ull, 0x9c4ec37a890aaea3ull, 0xd11de92c1b99b44aull, 0x4e85b62e5887bc05ull, 0xf8c2b9198c3bf7a8ull, 0x4bc25053b9cbe5d6ull, 0xfd625756f73124faull, + 0x55e73f0267e07550ull, 0x412f93650db99908ull, 0xd816d40bfdbfab18ull, 0xb437d79c8b5c2103ull, 0xc0ae289eff2b5edbull, 0x72e12d2149ca1651ull, 0xcf588093d8b91531ull, 0x0087fe84ca512942ull }, { // base nonce 4096 - 0x5572ea4a9de11931ull, 0x8ff20445d6db9cbfull, 0x2ac92983c0b49f15ull, 0x53189e447652e67cull, 0xd306b369e7d69af2ull, 0xb6488339eadca189ull, 0x7d0b22bb03c16619ull, 0x8814f4c029865d21ull, - 0x1698acbdfb4243eeull, 0x5b7f512dba18348bull, 0x0a18e4d3b1ac196eull, 0xbfeb9dac4fb12147ull, 0x4125abc3821d7eceull, 0x904a7a143f625da8ull, 0x9c7f2dcf10d2821aull, 0x43a3a87c90e84f15ull, - 0x886f5e9b2071b703ull, 0xeebf6555b0b0aafaull, 0xbc24a7292fc5279full, 0xf318100baa65191eull, 0x6036d6041cb052f5ull, 0xc72a5f8ea8ed07b7ull, 0x094e56f99032053bull, 0x89fd5acef5db38cdull, - 0xcf851955c44686fbull, 0x6c2cc8415a1cf4b5ull, 0x5915cc380747e0f7ull, 0xa5b8bfb7fb74c026ull, 0x5f5d268692d0fe2cull, 0xa92420eca4648fb2ull, 0x1323611e33754623ull, 0x708a051993795984ull + 0x11b20965d4b7d770ull, 0x79f9e81683b6b40dull, 0xa0a29deeb1bfe7fcull, 0x659c39b046e302cdull, 0x1d73b3b2b028e3c6ull, 0x5684f9cfca250f42ull, 0x3557e8a38274caf6ull, 0xc21936f699aab134ull, + 0xfff312b773b99b1bull, 0x67b5c77fc5684ab0ull, 0xcf674c04840dbf12ull, 0x142ece093c93d350ull, 0x34c8c7df40652ad5ull, 0x3489a9c4ca6de4deull, 0x52cdee49cf933e76ull, 0xb8109e27514efc9bull, + 0xb413283169ee54d8ull, 0x1da83f61cb227e14ull, 0x3392031e13f74f71ull, 0x8230c93965561ab5ull, 0xb83f25c6bfd1c007ull, 0x415a786a28400e23ull, 0x1cf31ff356e65345ull, 0x68f478572ab71688ull, + 0x18a989906a75dd4dull, 0xacb23094b3c493abull, 0xd261a6670fb96cbbull, 0xae4cb824de7294e0ull, 0xba88064fcfaa87a7ull, 0x8006c7f5c93f05e8ull, 0x69521e59ea0f419full, 0x46f01a8f8ef90e81ull }, { // base nonce 1000000 - 0x19f68656190c2d72ull, 0x0614eaf9f9786625ull, 0xc89b4c0b29cdf6a5ull, 0xe97552dfa51cd165ull, 0x095c3022193068e8ull, 0x1e8a83a6a1fc8167ull, 0xe684677a507c0dbcull, 0x39cd59b33ec6cc84ull, - 0xfbc7a722d8425a7full, 0x1a981ddc1319f337ull, 0x32ee67aa5212f3dfull, 0x53740c1f0e06f0e7ull, 0x4172139189021dbdull, 0xc99a60f6ea64747eull, 0x90c00b9aa598eafeull, 0xe849b8130b611a18ull, - 0x8f13d1a9611505d8ull, 0x50375ccddca5426eull, 0xe46afc8f034bdd7aull, 0xb3a279c9d73e9db6ull, 0xd81ead7c33d0d6b6ull, 0x164c0027d0291b60ull, 0x0d18d4b1f079f6baull, 0xf3e90f353be8a5deull, - 0xe31e3bf0d3f81e9aull, 0xfc14feadaecb44c8ull, 0x67d396bc37e6b80full, 0xa1cf4ff5cebc1004ull, 0xd3889081b6417effull, 0x74e3a2d09456ad15ull, 0x709460054c25e190ull, 0x14449eee6d3957a3ull + 0xf00317a0694d9610ull, 0x63708d2a7a5eb92dull, 0x088c6fc1772d7e02ull, 0xf141e5e0a4f5b3e1ull, 0x6a7323eba17685ecull, 0x0b165944db77b8dcull, 0x1f9e983986308684ull, 0x7dcbc9e7541c7467ull, + 0x8d33359a995972afull, 0x92230c4eb4f5119eull, 0x4a710f070d1973d9ull, 0x19e7b5167a992db8ull, 0xff3f02b6dc60a71bull, 0x2ac8417d64148a64ull, 0x4cf04ec8086dd4a3ull, 0x9504a843c0633bd2ull, + 0x5c6e295388094f37ull, 0x0d8a5b3711e8636cull, 0xb7677e2e05f2e89cull, 0x3b462f883b4f5ce5ull, 0xf00ad0bdf39b66e8ull, 0xb19453da44412614ull, 0x7add316a7b588c36ull, 0x24594f7f2940ebd6ull, + 0x5c6dc34b1ae87ce3ull, 0xa710c84800eef41full, 0x395d45e20ae50794ull, 0x6f619f31d7576194ull, 0xdaad9e363b0dfc2cull, 0x50bf1848a4499860ull, 0x709c1d92c78fd94cull, 0xbe45b661e97933f3ull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x40/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x40/vectors.json index 8fb6681fb..e7e624242 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x40/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x40/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x8b33d5c60f0e3fe5", "0xe7edd93c9eae6505", "0x99381f4d81c722ce", "0xd817d5d01693d9a7", "0x473d0bad742a6609", "0xd75c29c497cab02a", "0xa0db8f5aaca58cce", "0xc4de295193e75862", - "0x1d2deb87726a3503", "0x36ed34ba8370eac0", "0x689b5ddaae423450", "0x6507132e18ef25b0", "0xca4892dafa48ab61", "0x26b39a0a8d7583f0", "0xbcf46e4d6e4341a5", "0xdbe9237704a4b8bc", - "0x6fb724f6807cac26", "0xb48986723b644466", "0xa8958ab2c831dbdc", "0x1095bb8955a0a48e", "0x6fde063371fad10e", "0x01420d707cfb6e57", "0x9ef8e88c4c35736a", "0x92607050d08b24e8", - "0xab117dfce555499e", "0xbd480c8ceee753ba", "0x6a9a73bb40b9801a", "0x4bcf4bc90fc9a717", "0xbe2ecde94eba586d", "0x50e5397b12ec1613", "0xa33764874745d040", "0x47d202c031c1ca74" + "0x5179a95dd5733f10", "0x63a462b0c710bcad", "0x5d2e6023819b9793", "0x6f95d8931cc61b17", "0xaec76ffb955baa1c", "0xe737ad39963a091d", "0xc14aef1f0a8490b1", "0x960b14c3824ee067", + "0x5e630fadbb007d3c", "0x3bddc2bd3a29133d", "0x8a34fdeb41300bb5", "0x35203796b392eeae", "0x2b9ac1b72859d002", "0x233f790e76e3dad2", "0x99e7ac44571f8fdc", "0xd32a65caad0dc5f4", + "0x1cefadd2f1b2740c", "0xe508d4663fe52f10", "0x9c4ec37a890aaea3", "0xd11de92c1b99b44a", "0x4e85b62e5887bc05", "0xf8c2b9198c3bf7a8", "0x4bc25053b9cbe5d6", "0xfd625756f73124fa", + "0x55e73f0267e07550", "0x412f93650db99908", "0xd816d40bfdbfab18", "0xb437d79c8b5c2103", "0xc0ae289eff2b5edb", "0x72e12d2149ca1651", "0xcf588093d8b91531", "0x0087fe84ca512942" ]}, {"base_nonce": 4096, "expected": [ - "0x5572ea4a9de11931", "0x8ff20445d6db9cbf", "0x2ac92983c0b49f15", "0x53189e447652e67c", "0xd306b369e7d69af2", "0xb6488339eadca189", "0x7d0b22bb03c16619", "0x8814f4c029865d21", - "0x1698acbdfb4243ee", "0x5b7f512dba18348b", "0x0a18e4d3b1ac196e", "0xbfeb9dac4fb12147", "0x4125abc3821d7ece", "0x904a7a143f625da8", "0x9c7f2dcf10d2821a", "0x43a3a87c90e84f15", - "0x886f5e9b2071b703", "0xeebf6555b0b0aafa", "0xbc24a7292fc5279f", "0xf318100baa65191e", "0x6036d6041cb052f5", "0xc72a5f8ea8ed07b7", "0x094e56f99032053b", "0x89fd5acef5db38cd", - "0xcf851955c44686fb", "0x6c2cc8415a1cf4b5", "0x5915cc380747e0f7", "0xa5b8bfb7fb74c026", "0x5f5d268692d0fe2c", "0xa92420eca4648fb2", "0x1323611e33754623", "0x708a051993795984" + "0x11b20965d4b7d770", "0x79f9e81683b6b40d", "0xa0a29deeb1bfe7fc", "0x659c39b046e302cd", "0x1d73b3b2b028e3c6", "0x5684f9cfca250f42", "0x3557e8a38274caf6", "0xc21936f699aab134", + "0xfff312b773b99b1b", "0x67b5c77fc5684ab0", "0xcf674c04840dbf12", "0x142ece093c93d350", "0x34c8c7df40652ad5", "0x3489a9c4ca6de4de", "0x52cdee49cf933e76", "0xb8109e27514efc9b", + "0xb413283169ee54d8", "0x1da83f61cb227e14", "0x3392031e13f74f71", "0x8230c93965561ab5", "0xb83f25c6bfd1c007", "0x415a786a28400e23", "0x1cf31ff356e65345", "0x68f478572ab71688", + "0x18a989906a75dd4d", "0xacb23094b3c493ab", "0xd261a6670fb96cbb", "0xae4cb824de7294e0", "0xba88064fcfaa87a7", "0x8006c7f5c93f05e8", "0x69521e59ea0f419f", "0x46f01a8f8ef90e81" ]}, {"base_nonce": 1000000, "expected": [ - "0x19f68656190c2d72", "0x0614eaf9f9786625", "0xc89b4c0b29cdf6a5", "0xe97552dfa51cd165", "0x095c3022193068e8", "0x1e8a83a6a1fc8167", "0xe684677a507c0dbc", "0x39cd59b33ec6cc84", - "0xfbc7a722d8425a7f", "0x1a981ddc1319f337", "0x32ee67aa5212f3df", "0x53740c1f0e06f0e7", "0x4172139189021dbd", "0xc99a60f6ea64747e", "0x90c00b9aa598eafe", "0xe849b8130b611a18", - "0x8f13d1a9611505d8", "0x50375ccddca5426e", "0xe46afc8f034bdd7a", "0xb3a279c9d73e9db6", "0xd81ead7c33d0d6b6", "0x164c0027d0291b60", "0x0d18d4b1f079f6ba", "0xf3e90f353be8a5de", - "0xe31e3bf0d3f81e9a", "0xfc14feadaecb44c8", "0x67d396bc37e6b80f", "0xa1cf4ff5cebc1004", "0xd3889081b6417eff", "0x74e3a2d09456ad15", "0x709460054c25e190", "0x14449eee6d3957a3" + "0xf00317a0694d9610", "0x63708d2a7a5eb92d", "0x088c6fc1772d7e02", "0xf141e5e0a4f5b3e1", "0x6a7323eba17685ec", "0x0b165944db77b8dc", "0x1f9e983986308684", "0x7dcbc9e7541c7467", + "0x8d33359a995972af", "0x92230c4eb4f5119e", "0x4a710f070d1973d9", "0x19e7b5167a992db8", "0xff3f02b6dc60a71b", "0x2ac8417d64148a64", "0x4cf04ec8086dd4a3", "0x9504a843c0633bd2", + "0x5c6e295388094f37", "0x0d8a5b3711e8636c", "0xb7677e2e05f2e89c", "0x3b462f883b4f5ce5", "0xf00ad0bdf39b66e8", "0xb19453da44412614", "0x7add316a7b588c36", "0x24594f7f2940ebd6", + "0x5c6dc34b1ae87ce3", "0xa710c84800eef41f", "0x395d45e20ae50794", "0x6f619f31d7576194", "0xdaad9e363b0dfc2c", "0x50bf1848a4499860", "0x709c1d92c78fd94c", "0xbe45b661e97933f3" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cl index cbc5d4b19..7bba494b4 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cu index 722d87900..fd94c02c9 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x53/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cl index 3dda5afeb..31b6707f5 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cu index a9862303b..80dc54300 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x53/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/program.json b/proto-cuda/packs-ca3-shadow/sh256x53/program.json index 4fb00e833..5e0441f8f 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x53/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/program.metal b/proto-cuda/packs-ca3-shadow/sh256x53/program.metal index 38e5b41da..c24c6dbcc 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x53/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x53/program_bound.metal index f26665ab9..52ef3e532 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x53/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x53/vectors.h index df08f36e3..f6378865f 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x53/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x9771dab715d71261ull, 0x2f789c8578ad45f7ull, 0xfc9da4810f8196b1ull, 0x508616513c0103d9ull, 0xa4437c880d633e32ull, 0x972fdd14748673e4ull, 0xe58326218e52e816ull, 0x05f1aa766a05de2full, - 0x5a0802a428181a19ull, 0x5a33aa0527816100ull, 0x94e0eabd07b2fa2aull, 0xc7c20dc8566cb721ull, 0x189b9c2a14bba8faull, 0xa28f1353d5ba7b25ull, 0x86ce3df7aad12544ull, 0xdf3bccff4743de4eull, - 0x8d788ef1940c8864ull, 0xaa7671fb6d21e245ull, 0x9165ff575e147e30ull, 0x69e94a6a8b82e4b1ull, 0xcfad1b0dddaee567ull, 0x1d0527a178cf26d4ull, 0xda6c967f7d8e5e63ull, 0xed3f837cb1438585ull, - 0x9bb14627ef025cc2ull, 0x08084c71b63b8874ull, 0x51109206194ff893ull, 0xae4c0bd30a87da1bull, 0x636f54b9276801d6ull, 0x6508c23d1146c64aull, 0x137df6b1c65d335bull, 0x525676cf580b6f11ull + 0x2cf77375fada9562ull, 0x29d1272de509227full, 0x91d4136c1505e09full, 0xa7bb8a5de67e242bull, 0x8dc3ba1f46c6982aull, 0x6a16b690b0b99075ull, 0xaa5d27189935536aull, 0x8aacbe2c6b96d9bcull, + 0x4794ff27e0386224ull, 0x36ef7f6f61ecf041ull, 0x11447b9d4747bd72ull, 0xb744b71146fa1be9ull, 0x219e4d6c1c688c3eull, 0x0cc3c78cdd9cc443ull, 0x82b3951c79c0b612ull, 0x4dacf9d786eab45full, + 0x968aa75296ca85eeull, 0xa5b79d7af5d26480ull, 0x8bbd9792883e97c8ull, 0xe03b213b93d33432ull, 0x518e02a3aa6948ecull, 0x97e40fd2cdbed5d5ull, 0xff29e1c7580b88f4ull, 0x20ed302326713307ull, + 0x9404c771848120d6ull, 0x4689d78169b03940ull, 0x51cd99fba4f10a8eull, 0x90b3a264a4e7cfe5ull, 0xd1b1ecae4b866946ull, 0x6c68f33e7d2fd56full, 0x91a69762e7300969ull, 0x4691dedb4b1bdbe5ull }, { // base nonce 4096 - 0x1afa4ca3c965c3f5ull, 0x979626393ac908adull, 0x0ec8c4ba1abcd027ull, 0x7e6c26f6c03f15ccull, 0x7def92a296c97be7ull, 0xbeaec262659d72d4ull, 0xf5a7dda50892b2c5ull, 0x6c89bc70a249c825ull, - 0x0c58d024140130d3ull, 0x9a2ab37761c1f47bull, 0x241677b9869dc2f3ull, 0xc7e551770535e858ull, 0xf5b3125d49e65a78ull, 0x674212e38ba61f44ull, 0x8e69f6080a33d03eull, 0xfbed48ca3b12e78cull, - 0xc2dd49a4ad9ca24aull, 0x936d68e8a66b1204ull, 0x59b11d7e652b5c65ull, 0x742732ec4e6bfe6dull, 0xc3996c9b213ee4a5ull, 0x54e68ade1af61d71ull, 0x05117d54c3dfac1full, 0xd9fad59ae411d402ull, - 0x6f3d3c87a70c5350ull, 0xe84ad8082fc0d872ull, 0x50dc66ee26fee450ull, 0x447d4c50908467eeull, 0xde45e7f7fdbeb172ull, 0x0950381288b5a588ull, 0x2a57b3be740708b6ull, 0x4e238e93b5f0101dull + 0x276657d8f69e5c15ull, 0x8b7de4c5dbf992bdull, 0xd0a4f182b24e6cf0ull, 0xacbb5c48526e188eull, 0xa38306b53cc67c42ull, 0x11cca470ed3887fbull, 0x5687fc4637adf809ull, 0x9ba3a4d450661103ull, + 0x0a5c1266dc10a37bull, 0x935910f586486be0ull, 0x7a3b8af810c33ff7ull, 0xf324837ae40df38dull, 0x34012348f40cf383ull, 0x79dd9fb9f17f5c38ull, 0x84549c6a1667b679ull, 0x735932def43371d4ull, + 0x2b956e719488e32cull, 0x6fd05b9e1ca92977ull, 0xc90a97c6d8d1d05aull, 0xd4c0884d5941b52cull, 0x740bb899f1a208afull, 0xb63923c69f07876cull, 0xa730d4ea6d61689cull, 0xf79b56aa6ff39842ull, + 0x5c8dddc078c3551cull, 0xcb347b5d45709873ull, 0x26fb86ec45b4adb7ull, 0x2b5a7e626f7ce6c4ull, 0xc860e2532d6c9b36ull, 0x3a41b6f5e41c3de0ull, 0x6902b73e141f5ceaull, 0x48407f4b51fa3bfaull }, { // base nonce 1000000 - 0x21a07085d7c0bd82ull, 0x16a84b9d075f9acaull, 0xc4db8ee34ce88c5dull, 0xfaa43b3000940f4full, 0xb405ce2db3692d88ull, 0x4cc7c7604a634f08ull, 0xbd4deebb5fd0e1e8ull, 0x7f46c28a6d2f24deull, - 0xe79b310591584a6cull, 0xef3086c61a0b7d50ull, 0x3b5c32e6ec12e734ull, 0x5a95d256113ebd96ull, 0x3ae4561425816798ull, 0x7c5651ebd73d47d5ull, 0x5dd33e0d572cc4a1ull, 0xbeb53b6f4484b746ull, - 0x835212401c6e031dull, 0x45af4100c20b9b22ull, 0x0cc0538f479f2cddull, 0x4c160b9e0eb0ad3cull, 0x04d7a06292ea77b6ull, 0x623d2a40e1bbc924ull, 0x344eddcb7ef1f0ecull, 0x32d8eeb5e34f7935ull, - 0xb96144ba3c229441ull, 0xf03d905f538fefacull, 0x634397d3aa9343d3ull, 0x6dd337c6d3022fc1ull, 0xcae8e601f71a75f8ull, 0x0f24c6af99d12d4cull, 0x573c2b15b7befadeull, 0x39fd0197590efb2aull + 0xef548901f57297a8ull, 0xc7c688b741e1f2bcull, 0x99c904d364125a98ull, 0x1fd32794e62f65a8ull, 0x5ee860f5856aed76ull, 0xe3a3a76d9cacb3bfull, 0x0601eb8c8695a20eull, 0xcffa8d77def957edull, + 0x456e437d53517611ull, 0x022a3cfcd15a0406ull, 0x853e23294b5b7f7cull, 0x60f191a3c0f1db59ull, 0x7ff4099eb109b53cull, 0x7283109085693c13ull, 0x30dfc0718bbbfd4aull, 0x2567814e93c90627ull, + 0xa8b40888e7520f5cull, 0x0ca3cbc6c4767544ull, 0x64ff170528ae8295ull, 0x3b26500579048bc6ull, 0xbf425e07c180313dull, 0x5113a37cbe431b46ull, 0x997e53bceb25ec0dull, 0x348f11fa1f2cee1full, + 0xd92a6fba289adfa3ull, 0x483ec1da5250bef5ull, 0xa8f7bddd3020cea0ull, 0xc0d51bdca41ee79dull, 0xb42487c8ea632388ull, 0x34dfe9b0215d4b50ull, 0x1821307bd2238854ull, 0x1e2d9ce0dd65e623ull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x53/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x53/vectors.json index 0023718d7..534ab71fe 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x53/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x53/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x9771dab715d71261", "0x2f789c8578ad45f7", "0xfc9da4810f8196b1", "0x508616513c0103d9", "0xa4437c880d633e32", "0x972fdd14748673e4", "0xe58326218e52e816", "0x05f1aa766a05de2f", - "0x5a0802a428181a19", "0x5a33aa0527816100", "0x94e0eabd07b2fa2a", "0xc7c20dc8566cb721", "0x189b9c2a14bba8fa", "0xa28f1353d5ba7b25", "0x86ce3df7aad12544", "0xdf3bccff4743de4e", - "0x8d788ef1940c8864", "0xaa7671fb6d21e245", "0x9165ff575e147e30", "0x69e94a6a8b82e4b1", "0xcfad1b0dddaee567", "0x1d0527a178cf26d4", "0xda6c967f7d8e5e63", "0xed3f837cb1438585", - "0x9bb14627ef025cc2", "0x08084c71b63b8874", "0x51109206194ff893", "0xae4c0bd30a87da1b", "0x636f54b9276801d6", "0x6508c23d1146c64a", "0x137df6b1c65d335b", "0x525676cf580b6f11" + "0x2cf77375fada9562", "0x29d1272de509227f", "0x91d4136c1505e09f", "0xa7bb8a5de67e242b", "0x8dc3ba1f46c6982a", "0x6a16b690b0b99075", "0xaa5d27189935536a", "0x8aacbe2c6b96d9bc", + "0x4794ff27e0386224", "0x36ef7f6f61ecf041", "0x11447b9d4747bd72", "0xb744b71146fa1be9", "0x219e4d6c1c688c3e", "0x0cc3c78cdd9cc443", "0x82b3951c79c0b612", "0x4dacf9d786eab45f", + "0x968aa75296ca85ee", "0xa5b79d7af5d26480", "0x8bbd9792883e97c8", "0xe03b213b93d33432", "0x518e02a3aa6948ec", "0x97e40fd2cdbed5d5", "0xff29e1c7580b88f4", "0x20ed302326713307", + "0x9404c771848120d6", "0x4689d78169b03940", "0x51cd99fba4f10a8e", "0x90b3a264a4e7cfe5", "0xd1b1ecae4b866946", "0x6c68f33e7d2fd56f", "0x91a69762e7300969", "0x4691dedb4b1bdbe5" ]}, {"base_nonce": 4096, "expected": [ - "0x1afa4ca3c965c3f5", "0x979626393ac908ad", "0x0ec8c4ba1abcd027", "0x7e6c26f6c03f15cc", "0x7def92a296c97be7", "0xbeaec262659d72d4", "0xf5a7dda50892b2c5", "0x6c89bc70a249c825", - "0x0c58d024140130d3", "0x9a2ab37761c1f47b", "0x241677b9869dc2f3", "0xc7e551770535e858", "0xf5b3125d49e65a78", "0x674212e38ba61f44", "0x8e69f6080a33d03e", "0xfbed48ca3b12e78c", - "0xc2dd49a4ad9ca24a", "0x936d68e8a66b1204", "0x59b11d7e652b5c65", "0x742732ec4e6bfe6d", "0xc3996c9b213ee4a5", "0x54e68ade1af61d71", "0x05117d54c3dfac1f", "0xd9fad59ae411d402", - "0x6f3d3c87a70c5350", "0xe84ad8082fc0d872", "0x50dc66ee26fee450", "0x447d4c50908467ee", "0xde45e7f7fdbeb172", "0x0950381288b5a588", "0x2a57b3be740708b6", "0x4e238e93b5f0101d" + "0x276657d8f69e5c15", "0x8b7de4c5dbf992bd", "0xd0a4f182b24e6cf0", "0xacbb5c48526e188e", "0xa38306b53cc67c42", "0x11cca470ed3887fb", "0x5687fc4637adf809", "0x9ba3a4d450661103", + "0x0a5c1266dc10a37b", "0x935910f586486be0", "0x7a3b8af810c33ff7", "0xf324837ae40df38d", "0x34012348f40cf383", "0x79dd9fb9f17f5c38", "0x84549c6a1667b679", "0x735932def43371d4", + "0x2b956e719488e32c", "0x6fd05b9e1ca92977", "0xc90a97c6d8d1d05a", "0xd4c0884d5941b52c", "0x740bb899f1a208af", "0xb63923c69f07876c", "0xa730d4ea6d61689c", "0xf79b56aa6ff39842", + "0x5c8dddc078c3551c", "0xcb347b5d45709873", "0x26fb86ec45b4adb7", "0x2b5a7e626f7ce6c4", "0xc860e2532d6c9b36", "0x3a41b6f5e41c3de0", "0x6902b73e141f5cea", "0x48407f4b51fa3bfa" ]}, {"base_nonce": 1000000, "expected": [ - "0x21a07085d7c0bd82", "0x16a84b9d075f9aca", "0xc4db8ee34ce88c5d", "0xfaa43b3000940f4f", "0xb405ce2db3692d88", "0x4cc7c7604a634f08", "0xbd4deebb5fd0e1e8", "0x7f46c28a6d2f24de", - "0xe79b310591584a6c", "0xef3086c61a0b7d50", "0x3b5c32e6ec12e734", "0x5a95d256113ebd96", "0x3ae4561425816798", "0x7c5651ebd73d47d5", "0x5dd33e0d572cc4a1", "0xbeb53b6f4484b746", - "0x835212401c6e031d", "0x45af4100c20b9b22", "0x0cc0538f479f2cdd", "0x4c160b9e0eb0ad3c", "0x04d7a06292ea77b6", "0x623d2a40e1bbc924", "0x344eddcb7ef1f0ec", "0x32d8eeb5e34f7935", - "0xb96144ba3c229441", "0xf03d905f538fefac", "0x634397d3aa9343d3", "0x6dd337c6d3022fc1", "0xcae8e601f71a75f8", "0x0f24c6af99d12d4c", "0x573c2b15b7befade", "0x39fd0197590efb2a" + "0xef548901f57297a8", "0xc7c688b741e1f2bc", "0x99c904d364125a98", "0x1fd32794e62f65a8", "0x5ee860f5856aed76", "0xe3a3a76d9cacb3bf", "0x0601eb8c8695a20e", "0xcffa8d77def957ed", + "0x456e437d53517611", "0x022a3cfcd15a0406", "0x853e23294b5b7f7c", "0x60f191a3c0f1db59", "0x7ff4099eb109b53c", "0x7283109085693c13", "0x30dfc0718bbbfd4a", "0x2567814e93c90627", + "0xa8b40888e7520f5c", "0x0ca3cbc6c4767544", "0x64ff170528ae8295", "0x3b26500579048bc6", "0xbf425e07c180313d", "0x5113a37cbe431b46", "0x997e53bceb25ec0d", "0x348f11fa1f2cee1f", + "0xd92a6fba289adfa3", "0x483ec1da5250bef5", "0xa8f7bddd3020cea0", "0xc0d51bdca41ee79d", "0xb42487c8ea632388", "0x34dfe9b0215d4b50", "0x1821307bd2238854", "0x1e2d9ce0dd65e623" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cl index 29c0bf356..6b2f16344 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cu index 2da273cfa..4e546f947 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x7/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cl index 90a79d334..dc712a127 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cu index 8be9979c6..b9160475b 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x7/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/program.json b/proto-cuda/packs-ca3-shadow/sh256x7/program.json index 8758bb590..558ee55a5 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x7/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/program.metal b/proto-cuda/packs-ca3-shadow/sh256x7/program.metal index 428804334..28cc87993 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x7/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x7/program_bound.metal index 7665e7144..384b02c1c 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x7/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x7/vectors.h index 90226dedd..bd4128547 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x7/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xda6688d14887f390ull, 0xa967fb5329ab8301ull, 0xb36d89ddf3f7013aull, 0x8e5916887c019c5bull, 0x0b1b5e0a470dda07ull, 0x9743557891c694a0ull, 0x8b58ec4694a4b51eull, 0xaaa22b2c46199c0dull, - 0xb5e07c83348843f6ull, 0xda3e0641a2fbfa9aull, 0xea345b25e33952a8ull, 0x60b3693e4faa00b0ull, 0x11d7c24c8a92244cull, 0x3ac69fc6a553a1c5ull, 0x3248ecb535caa90eull, 0x5ed2eb6b3cdf16d0ull, - 0xaf92f32b6f8168d2ull, 0x753473cbf8f9d4baull, 0xb5aebafe1e77eb62ull, 0xf14ddaae76168834ull, 0xf4fcd368a46402e2ull, 0x219ab478cf87bd15ull, 0xb7742b0f7031c081ull, 0x17ea8d82545060e5ull, - 0xced8eb883ff74e61ull, 0xeb0ea2bf4b3dd264ull, 0x4c6fa8f5f99206faull, 0x3e6345b3f4e6938cull, 0x3ff0db0f089c87e7ull, 0x3d6f1b5d9f4795abull, 0xb9d7ad3179722417ull, 0xb7c54d6324fb8b3bull + 0x3f77ec1d2d2164bfull, 0x19167b09e9ab3787ull, 0x7eee7a0d62f1737eull, 0xb84f93f13600859cull, 0x6569d4717aa2c6d5ull, 0xa2e0c966fe871a99ull, 0xb95a138c1276d3a8ull, 0x4809eb421f66de0dull, + 0x631e2dd238e7c198ull, 0xe36192956680183dull, 0x9c1329d8697e46f8ull, 0xe712ef0751e3521eull, 0x50067d9a09e8d0e7ull, 0x9562b8e6ece0f14eull, 0x16d72cb2431cbd2full, 0x196d95a41f13da5bull, + 0x0374a46f9b0f1b44ull, 0x6e5776eca6afe212ull, 0xf09902b7b386c555ull, 0x81d9179d60947966ull, 0x337df375bbfec1e5ull, 0x833e4ce2f4276021ull, 0xbaefde5705d8f0afull, 0x7282967fcb82fce3ull, + 0x8b1010c0c8e031cbull, 0xcafc56c61eeaadf1ull, 0x58de8b86916cc34aull, 0x03bf7fcecae0e4d7ull, 0x65e6e49711b071ffull, 0xbef5a4cd55215039ull, 0x543ba6f45ee75bfbull, 0x93076193183bd94eull }, { // base nonce 4096 - 0xe3b44b175fc21b28ull, 0x3cbcac8cf0157f56ull, 0x8ba8bd15c6e4fac5ull, 0xeea33e58ceaff2f9ull, 0x1aa91b8ed208e63dull, 0x2de5d74a2ea58735ull, 0x1441f49981a3d1b0ull, 0x23435140f8545861ull, - 0x5b1d6ad6819e4d55ull, 0x92c7cd25d7f03d99ull, 0x9e52bf6eee3cd384ull, 0x296d5aea3ceed953ull, 0xd8ea21a9e77eaa7full, 0xb1f3ca3d7765a2a1ull, 0xf092c73783629a7bull, 0x2fca1ad4ca6ebeafull, - 0x6502fa6e2782982dull, 0xfddb10daa3a8bee3ull, 0x2e231d6ec341e3faull, 0xa37b7630551c909aull, 0xc38f37d60ea55cbfull, 0x2dca68ba3d90427cull, 0x632441c2905865fbull, 0xe222a7879098bad0ull, - 0x0b9702bfdfd8b4d4ull, 0xf647dd13007d96beull, 0x047245e2c8ed40d4ull, 0x522dd7eb913cf443ull, 0x44c1490f64d1eb99ull, 0xbbb4e274a10aadabull, 0x87f54e49f42ea1b4ull, 0x976c2cdffe1e715dull + 0x62796225b9343743ull, 0x73608fb72fba080bull, 0x6629d503d566520dull, 0x50546818723f8b26ull, 0xdc09b82b62b7dc50ull, 0x0edf31be85850c31ull, 0x35e57b7b0407e5d1ull, 0xbb462a1c7a2caf22ull, + 0xb4036d651348e0afull, 0x32cacc6ab061d940ull, 0x956d7fc493bccec2ull, 0x29a39f1ec1f8f3c0ull, 0x3b4fc8c76c85dc88ull, 0xc096c4caba862939ull, 0x1616610991a07920ull, 0x6f76d451fbf8a9c6ull, + 0x49d284fe56e94dbeull, 0x43f3559a627a6863ull, 0x2bf6124189fab751ull, 0x2bf4a7add8c354cfull, 0x9f4f351538d8d0feull, 0x0481d7544942f217ull, 0x5a7f7daaa39957fbull, 0x8524491ac8a5701cull, + 0xa78f95e61ea5838dull, 0x54c584251ca7b0eeull, 0xb1d2cafb1d6af869ull, 0xee761cf06ef8a18cull, 0x4adc0e55809a4d1cull, 0x8d73e06326ec5beaull, 0xe66881c3358d5130ull, 0x38b763467ee63d86ull }, { // base nonce 1000000 - 0x8d57cd337f20fb07ull, 0x7ec4cd550630e97dull, 0x19e3be943d762816ull, 0xa82016fc05af1cb4ull, 0xf9df7904600efee9ull, 0xeee8357d45fc5da0ull, 0x7034a05b56de2729ull, 0xa49c0f26c2c6c30aull, - 0x8f6a1f26ad5d3ca8ull, 0x54be93649be7de81ull, 0xd91797784e113edeull, 0x6629319ac39754fbull, 0x03a17cbe16fc0b12ull, 0x1844d087f8df1e4aull, 0x032115e4fee93f48ull, 0x97f1da84a885b38aull, - 0x6a3cbad5a2cfe5baull, 0x6ecebd0bae287f5full, 0xaf2bce191bd441caull, 0x880692461306a21aull, 0xae648081f8f93103ull, 0xf43d9de1f8d4f816ull, 0x93ed1344d9bae877ull, 0xa90b327f4ae55408ull, - 0xa497f12476c412caull, 0x907602bbe1d48d10ull, 0x7252c27e00e43794ull, 0x7382d4e82184f352ull, 0x70db6147f84715e8ull, 0x818f22a7878fbe21ull, 0x70d92097d7a7e469ull, 0xe03d1f285eab54a1ull + 0xfc82ff6910466fdfull, 0x42eb3bb4be8a5ef9ull, 0x86013923cd34b10dull, 0xd02dfeef1fce8153ull, 0x93764bf47dd6f49bull, 0x64f0232f9ddac8c6ull, 0x4cc32e27b98d82f8ull, 0x03736968d676e3adull, + 0xb5fd0d7b8edaa1c5ull, 0x572d46bd70260af4ull, 0x3a3e7912cd496f16ull, 0x41b75fd82cd1304dull, 0x930d1910fbb0378eull, 0x281dfbdae2723aa5ull, 0xa1dd8041ea0f57feull, 0xef393e1fbfdc7a58ull, + 0xe83a26ae4aa68767ull, 0xe640f8b81e63e66dull, 0xcdad5e57f751eae1ull, 0x223c7272385c7f40ull, 0x5181b6520f505df5ull, 0xd04747c6c600124bull, 0x7f5189b8cc3cc25aull, 0xbe0051bff24f2128ull, + 0x25d36bfa771be610ull, 0x730985dd8e3bb214ull, 0x3f32c40a5a204e3aull, 0x7889550129289027ull, 0x3d56c08a835ab5edull, 0xd0417d0dc1782f94ull, 0x45896ebd32f1f6e1ull, 0x07e9912c038a242full } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x7/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x7/vectors.json index 9eac3ef12..ee9233cb5 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x7/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x7/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xda6688d14887f390", "0xa967fb5329ab8301", "0xb36d89ddf3f7013a", "0x8e5916887c019c5b", "0x0b1b5e0a470dda07", "0x9743557891c694a0", "0x8b58ec4694a4b51e", "0xaaa22b2c46199c0d", - "0xb5e07c83348843f6", "0xda3e0641a2fbfa9a", "0xea345b25e33952a8", "0x60b3693e4faa00b0", "0x11d7c24c8a92244c", "0x3ac69fc6a553a1c5", "0x3248ecb535caa90e", "0x5ed2eb6b3cdf16d0", - "0xaf92f32b6f8168d2", "0x753473cbf8f9d4ba", "0xb5aebafe1e77eb62", "0xf14ddaae76168834", "0xf4fcd368a46402e2", "0x219ab478cf87bd15", "0xb7742b0f7031c081", "0x17ea8d82545060e5", - "0xced8eb883ff74e61", "0xeb0ea2bf4b3dd264", "0x4c6fa8f5f99206fa", "0x3e6345b3f4e6938c", "0x3ff0db0f089c87e7", "0x3d6f1b5d9f4795ab", "0xb9d7ad3179722417", "0xb7c54d6324fb8b3b" + "0x3f77ec1d2d2164bf", "0x19167b09e9ab3787", "0x7eee7a0d62f1737e", "0xb84f93f13600859c", "0x6569d4717aa2c6d5", "0xa2e0c966fe871a99", "0xb95a138c1276d3a8", "0x4809eb421f66de0d", + "0x631e2dd238e7c198", "0xe36192956680183d", "0x9c1329d8697e46f8", "0xe712ef0751e3521e", "0x50067d9a09e8d0e7", "0x9562b8e6ece0f14e", "0x16d72cb2431cbd2f", "0x196d95a41f13da5b", + "0x0374a46f9b0f1b44", "0x6e5776eca6afe212", "0xf09902b7b386c555", "0x81d9179d60947966", "0x337df375bbfec1e5", "0x833e4ce2f4276021", "0xbaefde5705d8f0af", "0x7282967fcb82fce3", + "0x8b1010c0c8e031cb", "0xcafc56c61eeaadf1", "0x58de8b86916cc34a", "0x03bf7fcecae0e4d7", "0x65e6e49711b071ff", "0xbef5a4cd55215039", "0x543ba6f45ee75bfb", "0x93076193183bd94e" ]}, {"base_nonce": 4096, "expected": [ - "0xe3b44b175fc21b28", "0x3cbcac8cf0157f56", "0x8ba8bd15c6e4fac5", "0xeea33e58ceaff2f9", "0x1aa91b8ed208e63d", "0x2de5d74a2ea58735", "0x1441f49981a3d1b0", "0x23435140f8545861", - "0x5b1d6ad6819e4d55", "0x92c7cd25d7f03d99", "0x9e52bf6eee3cd384", "0x296d5aea3ceed953", "0xd8ea21a9e77eaa7f", "0xb1f3ca3d7765a2a1", "0xf092c73783629a7b", "0x2fca1ad4ca6ebeaf", - "0x6502fa6e2782982d", "0xfddb10daa3a8bee3", "0x2e231d6ec341e3fa", "0xa37b7630551c909a", "0xc38f37d60ea55cbf", "0x2dca68ba3d90427c", "0x632441c2905865fb", "0xe222a7879098bad0", - "0x0b9702bfdfd8b4d4", "0xf647dd13007d96be", "0x047245e2c8ed40d4", "0x522dd7eb913cf443", "0x44c1490f64d1eb99", "0xbbb4e274a10aadab", "0x87f54e49f42ea1b4", "0x976c2cdffe1e715d" + "0x62796225b9343743", "0x73608fb72fba080b", "0x6629d503d566520d", "0x50546818723f8b26", "0xdc09b82b62b7dc50", "0x0edf31be85850c31", "0x35e57b7b0407e5d1", "0xbb462a1c7a2caf22", + "0xb4036d651348e0af", "0x32cacc6ab061d940", "0x956d7fc493bccec2", "0x29a39f1ec1f8f3c0", "0x3b4fc8c76c85dc88", "0xc096c4caba862939", "0x1616610991a07920", "0x6f76d451fbf8a9c6", + "0x49d284fe56e94dbe", "0x43f3559a627a6863", "0x2bf6124189fab751", "0x2bf4a7add8c354cf", "0x9f4f351538d8d0fe", "0x0481d7544942f217", "0x5a7f7daaa39957fb", "0x8524491ac8a5701c", + "0xa78f95e61ea5838d", "0x54c584251ca7b0ee", "0xb1d2cafb1d6af869", "0xee761cf06ef8a18c", "0x4adc0e55809a4d1c", "0x8d73e06326ec5bea", "0xe66881c3358d5130", "0x38b763467ee63d86" ]}, {"base_nonce": 1000000, "expected": [ - "0x8d57cd337f20fb07", "0x7ec4cd550630e97d", "0x19e3be943d762816", "0xa82016fc05af1cb4", "0xf9df7904600efee9", "0xeee8357d45fc5da0", "0x7034a05b56de2729", "0xa49c0f26c2c6c30a", - "0x8f6a1f26ad5d3ca8", "0x54be93649be7de81", "0xd91797784e113ede", "0x6629319ac39754fb", "0x03a17cbe16fc0b12", "0x1844d087f8df1e4a", "0x032115e4fee93f48", "0x97f1da84a885b38a", - "0x6a3cbad5a2cfe5ba", "0x6ecebd0bae287f5f", "0xaf2bce191bd441ca", "0x880692461306a21a", "0xae648081f8f93103", "0xf43d9de1f8d4f816", "0x93ed1344d9bae877", "0xa90b327f4ae55408", - "0xa497f12476c412ca", "0x907602bbe1d48d10", "0x7252c27e00e43794", "0x7382d4e82184f352", "0x70db6147f84715e8", "0x818f22a7878fbe21", "0x70d92097d7a7e469", "0xe03d1f285eab54a1" + "0xfc82ff6910466fdf", "0x42eb3bb4be8a5ef9", "0x86013923cd34b10d", "0xd02dfeef1fce8153", "0x93764bf47dd6f49b", "0x64f0232f9ddac8c6", "0x4cc32e27b98d82f8", "0x03736968d676e3ad", + "0xb5fd0d7b8edaa1c5", "0x572d46bd70260af4", "0x3a3e7912cd496f16", "0x41b75fd82cd1304d", "0x930d1910fbb0378e", "0x281dfbdae2723aa5", "0xa1dd8041ea0f57fe", "0xef393e1fbfdc7a58", + "0xe83a26ae4aa68767", "0xe640f8b81e63e66d", "0xcdad5e57f751eae1", "0x223c7272385c7f40", "0x5181b6520f505df5", "0xd04747c6c600124b", "0x7f5189b8cc3cc25a", "0xbe0051bff24f2128", + "0x25d36bfa771be610", "0x730985dd8e3bb214", "0x3f32c40a5a204e3a", "0x7889550129289027", "0x3d56c08a835ab5ed", "0xd0417d0dc1782f94", "0x45896ebd32f1f6e1", "0x07e9912c038a242f" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cl b/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cl index 389c69a32..409c1530d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cu b/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cu index 04b229046..d5a8dfadc 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x88/kernel.cu @@ -70,19 +70,19 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -90,13 +90,13 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -108,7 +108,7 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -117,8 +117,8 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cl b/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cl index 34d4fea9d..2d73eb17d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cl +++ b/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cl @@ -210,19 +210,19 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -230,13 +230,13 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -248,7 +248,7 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -257,8 +257,8 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add @@ -572,19 +572,19 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = mul_hi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 18 shfl r5 = r5 * r0; // 19 mul { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r3 = r3 ^ t_; } // 20 shfl { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r2 = r2 ^ t_; } // 21 shfl r6 = mul_hi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // 26 shfl @@ -592,13 +592,13 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = mul_hi(r0, r5); // 35 mulhi { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r5 = r5 ^ t_; } // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add { uint t_; IGNEUM_SHFL_XOR(t_, r5, 4u); r1 = r1 ^ t_; } // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -610,7 +610,7 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r1 = mul_hi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -619,8 +619,8 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cu b/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cu index 00ae080ba..a82b5e5c1 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cu +++ b/proto-cuda/packs-ca3-shadow/sh256x88/kernel_bound.cu @@ -46,19 +46,19 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 8 mulhi r6 = rotr_var(r6, r3); // 9 rotr r3 = r3 | r4; // 10 or - r4 = r4 ^ ds[r3 & mask]; // 11 load + r4 = r4 ^ ds[r6 & mask]; // 11 load r0 = __umulhi(r0, r4); // 12 mulhi r5 = r5 + r1 + ((((sel >> 30u) & 1u) != 0u) ? 0xd3177981u : 0xc7934706u); // 13 add - r0 = r0 ^ ds[r4 & mask]; // 14 load + r0 = r0 ^ ds[r5 & mask]; // 14 load r2 = r2 - r4; // 15 sub - r2 = r2 ^ ds[r0 & mask]; // 16 load - r7 = r7 ^ ds[r2 & mask]; // 17 load + r2 = r2 ^ ds[r7 & mask]; // 16 load + r7 = r7 ^ ds[r4 & mask]; // 17 load r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 18 shfl r5 = r5 * r0; // 19 mul r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // 20 shfl r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // 21 shfl r6 = __umulhi(r6, r2); // 22 mulhi - r6 = r6 ^ ds[r1 & mask]; // 23 load + r6 = r6 ^ ds[r3 & mask]; // 23 load r5 = r5 * r0; // 24 mul r5 = rotl_imm(r5, 19u); // 25 rotl r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // 26 shfl @@ -66,13 +66,13 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r0 = r0 ^ r4; // 28 xor r3 = r3 - r0; // 29 sub r5 = r5 * r1; // 30 mul - r7 = r7 ^ ds[r2 & mask]; // 31 load - r1 = r1 ^ ds[r0 & mask]; // 32 load + r7 = r7 ^ ds[r3 & mask]; // 31 load + r1 = r1 ^ ds[r2 & mask]; // 32 load r5 = r5 ^ r6; // 33 xor - r5 = r5 ^ ds[r1 & mask]; // 34 load + r5 = r5 ^ ds[r0 & mask]; // 34 load r0 = __umulhi(r0, r5); // 35 mulhi r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // 36 shfl - r7 = r7 ^ ds[r0 & mask]; // 37 load + r7 = r7 ^ ds[r6 & mask]; // 37 load r3 = r3 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0x230c005cu : 0x75ba2fadu); // 38 add r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 4); // 39 shfl r2 = r2 ^ r5; // 40 xor @@ -84,7 +84,7 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r1 = __umulhi(r1, r5); // 46 mulhi r4 = r4 - r3; // 47 sub r2 = rotr_var(r2, r6); // 48 rotr - r3 = r3 ^ ds[r5 & mask]; // 49 load + r3 = r3 ^ ds[r4 & mask]; // 49 load r1 = r1 + r5 + ((((sel >> 7u) & 1u) != 0u) ? 0x1907970cu : 0x81b8bc2cu); // 50 add r0 = r0 * r2; // 51 mul r0 = r0 + r2 + ((((sel >> 6u) & 1u) != 0u) ? 0x699fd448u : 0x4f92b968u); // 52 add @@ -93,8 +93,8 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba r3 = r3 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0xa54c55a0u : 0x7b0fe07au); // 55 add r6 = r6 ^ ds[r7 & mask]; // 56 load r1 = rotr_var(r1, r5); // 57 rotr - r5 = r5 ^ ds[r4 & mask]; // 58 load - r6 = r6 ^ ds[r2 & mask]; // 59 load + r5 = r5 ^ ds[r3 & mask]; // 58 load + r6 = r6 ^ ds[r1 & mask]; // 59 load r3 = r5 * r0 + r3; // 60 mad r5 = r5 + r7 + ((((sel >> 31u) & 1u) != 0u) ? 0xad7493e7u : 0xaf9dd72du); // 61 add r4 = r4 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x1e07c3d9u : 0x89841d87u); // 62 add diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/program.json b/proto-cuda/packs-ca3-shadow/sh256x88/program.json index a3659596c..477aa8dc9 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/program.json +++ b/proto-cuda/packs-ca3-shadow/sh256x88/program.json @@ -332,19 +332,19 @@ {"i": 8, "op": "mulhi", "dst": 1, "src": 5, "src2": 2, "imm": "0xa5eebca5", "imm2": "0x5703a72b", "rot": 13, "bit": 13, "mask": 16, "width": 1}, {"i": 9, "op": "rotr", "dst": 6, "src": 3, "src2": 4, "imm": "0x17a5a9c7", "imm2": "0xdcfb93a1", "rot": 20, "bit": 27, "mask": 2, "width": 1}, {"i": 10, "op": "or", "dst": 3, "src": 4, "src2": 1, "imm": "0xccb7d785", "imm2": "0xc335364c", "rot": 14, "bit": 12, "mask": 4, "width": 1}, - {"i": 11, "op": "load", "dst": 4, "src": 3, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, + {"i": 11, "op": "load", "dst": 4, "src": 6, "src2": 2, "imm": "0x88cb9af3", "imm2": "0x4e7dc10d", "rot": 24, "bit": 17, "mask": 4, "width": 1}, {"i": 12, "op": "mulhi", "dst": 0, "src": 4, "src2": 4, "imm": "0x45374321", "imm2": "0x3cd91989", "rot": 11, "bit": 4, "mask": 2, "width": 1}, {"i": 13, "op": "add", "dst": 5, "src": 1, "src2": 2, "imm": "0xc7934706", "imm2": "0xd3177981", "rot": 16, "bit": 30, "mask": 2, "width": 1}, - {"i": 14, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, + {"i": 14, "op": "load", "dst": 0, "src": 5, "src2": 3, "imm": "0xfd7f56bb", "imm2": "0x65e14f52", "rot": 13, "bit": 22, "mask": 2, "width": 1}, {"i": 15, "op": "sub", "dst": 2, "src": 4, "src2": 4, "imm": "0x35a80b49", "imm2": "0x060f2d13", "rot": 16, "bit": 20, "mask": 16, "width": 1}, - {"i": 16, "op": "load", "dst": 2, "src": 0, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, - {"i": 17, "op": "load", "dst": 7, "src": 2, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, + {"i": 16, "op": "load", "dst": 2, "src": 7, "src2": 2, "imm": "0xae0a32c2", "imm2": "0x4c2a4cfe", "rot": 8, "bit": 31, "mask": 16, "width": 1}, + {"i": 17, "op": "load", "dst": 7, "src": 4, "src2": 6, "imm": "0x82a84cc3", "imm2": "0x21a38d68", "rot": 15, "bit": 21, "mask": 2, "width": 1}, {"i": 18, "op": "shfl", "dst": 7, "src": 3, "src2": 3, "imm": "0xa3818806", "imm2": "0x8f66b5c8", "rot": 14, "bit": 6, "mask": 4, "width": 1}, {"i": 19, "op": "mul", "dst": 5, "src": 0, "src2": 1, "imm": "0xa00de107", "imm2": "0x77bfcaa5", "rot": 3, "bit": 10, "mask": 2, "width": 1}, {"i": 20, "op": "shfl", "dst": 3, "src": 4, "src2": 7, "imm": "0x1d2b8cab", "imm2": "0x80b4f9a2", "rot": 14, "bit": 25, "mask": 2, "width": 1}, {"i": 21, "op": "shfl", "dst": 2, "src": 4, "src2": 5, "imm": "0x3ac915d2", "imm2": "0x5fba7bc2", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 22, "op": "mulhi", "dst": 6, "src": 2, "src2": 0, "imm": "0xdc3ec8fd", "imm2": "0x599e2fa3", "rot": 22, "bit": 3, "mask": 2, "width": 1}, - {"i": 23, "op": "load", "dst": 6, "src": 1, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, + {"i": 23, "op": "load", "dst": 6, "src": 3, "src2": 5, "imm": "0x2a6b16d5", "imm2": "0xd73e396f", "rot": 28, "bit": 29, "mask": 2, "width": 1}, {"i": 24, "op": "mul", "dst": 5, "src": 0, "src2": 7, "imm": "0x376d0223", "imm2": "0xe1c2169a", "rot": 4, "bit": 16, "mask": 16, "width": 1}, {"i": 25, "op": "rotl", "dst": 5, "src": 7, "src2": 3, "imm": "0x78ad8c60", "imm2": "0x6f5b77d5", "rot": 19, "bit": 11, "mask": 16, "width": 1}, {"i": 26, "op": "shfl", "dst": 7, "src": 6, "src2": 5, "imm": "0x93915b9f", "imm2": "0x1e61fb6b", "rot": 28, "bit": 23, "mask": 2, "width": 1}, @@ -352,13 +352,13 @@ {"i": 28, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x20a57fda", "imm2": "0x088c848e", "rot": 16, "bit": 13, "mask": 4, "width": 1}, {"i": 29, "op": "sub", "dst": 3, "src": 0, "src2": 2, "imm": "0x49d95fd5", "imm2": "0x1a5f946a", "rot": 6, "bit": 12, "mask": 1, "width": 1}, {"i": 30, "op": "mul", "dst": 5, "src": 1, "src2": 7, "imm": "0x0a816217", "imm2": "0x405c4f73", "rot": 13, "bit": 27, "mask": 4, "width": 1}, - {"i": 31, "op": "load", "dst": 7, "src": 2, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, - {"i": 32, "op": "load", "dst": 1, "src": 0, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, + {"i": 31, "op": "load", "dst": 7, "src": 3, "src2": 2, "imm": "0x09ed045e", "imm2": "0xd69c4715", "rot": 5, "bit": 9, "mask": 2, "width": 1}, + {"i": 32, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0xeb79ea49", "imm2": "0xcc587f5a", "rot": 6, "bit": 8, "mask": 16, "width": 1}, {"i": 33, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x3027401e", "imm2": "0x5f20c27e", "rot": 18, "bit": 9, "mask": 2, "width": 1}, - {"i": 34, "op": "load", "dst": 5, "src": 1, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, + {"i": 34, "op": "load", "dst": 5, "src": 0, "src2": 3, "imm": "0x0e1cab07", "imm2": "0x09356c5b", "rot": 19, "bit": 31, "mask": 1, "width": 1}, {"i": 35, "op": "mulhi", "dst": 0, "src": 5, "src2": 2, "imm": "0x90e31357", "imm2": "0xabd32484", "rot": 26, "bit": 5, "mask": 8, "width": 1}, {"i": 36, "op": "shfl", "dst": 5, "src": 2, "src2": 5, "imm": "0xee9a955f", "imm2": "0x31b3faed", "rot": 8, "bit": 24, "mask": 4, "width": 1}, - {"i": 37, "op": "load", "dst": 7, "src": 0, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, + {"i": 37, "op": "load", "dst": 7, "src": 6, "src2": 7, "imm": "0x3ba2f832", "imm2": "0x1160dcd3", "rot": 4, "bit": 29, "mask": 1, "width": 1}, {"i": 38, "op": "add", "dst": 3, "src": 1, "src2": 7, "imm": "0x75ba2fad", "imm2": "0x230c005c", "rot": 4, "bit": 27, "mask": 1, "width": 1}, {"i": 39, "op": "shfl", "dst": 1, "src": 5, "src2": 3, "imm": "0xdbf37e75", "imm2": "0xb5ac1969", "rot": 30, "bit": 13, "mask": 4, "width": 1}, {"i": 40, "op": "xor", "dst": 2, "src": 5, "src2": 5, "imm": "0x47f136c5", "imm2": "0x06ce9153", "rot": 19, "bit": 10, "mask": 2, "width": 1}, @@ -370,7 +370,7 @@ {"i": 46, "op": "mulhi", "dst": 1, "src": 5, "src2": 1, "imm": "0xffb2147a", "imm2": "0xccde9b05", "rot": 13, "bit": 9, "mask": 2, "width": 1}, {"i": 47, "op": "sub", "dst": 4, "src": 3, "src2": 5, "imm": "0x73b36234", "imm2": "0x3f5d5997", "rot": 7, "bit": 18, "mask": 2, "width": 1}, {"i": 48, "op": "rotr", "dst": 2, "src": 6, "src2": 3, "imm": "0x3a4d9aa9", "imm2": "0x212bec7b", "rot": 4, "bit": 29, "mask": 16, "width": 1}, - {"i": 49, "op": "load", "dst": 3, "src": 5, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, + {"i": 49, "op": "load", "dst": 3, "src": 4, "src2": 2, "imm": "0x626f11df", "imm2": "0x56cd5bfd", "rot": 7, "bit": 1, "mask": 1, "width": 1}, {"i": 50, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x81b8bc2c", "imm2": "0x1907970c", "rot": 28, "bit": 7, "mask": 4, "width": 1}, {"i": 51, "op": "mul", "dst": 0, "src": 2, "src2": 2, "imm": "0xa8848b30", "imm2": "0xef6ac348", "rot": 9, "bit": 15, "mask": 8, "width": 1}, {"i": 52, "op": "add", "dst": 0, "src": 2, "src2": 0, "imm": "0x4f92b968", "imm2": "0x699fd448", "rot": 22, "bit": 6, "mask": 4, "width": 1}, @@ -379,8 +379,8 @@ {"i": 55, "op": "add", "dst": 3, "src": 7, "src2": 2, "imm": "0x7b0fe07a", "imm2": "0xa54c55a0", "rot": 10, "bit": 1, "mask": 1, "width": 1}, {"i": 56, "op": "load", "dst": 6, "src": 7, "src2": 4, "imm": "0x01eba9aa", "imm2": "0x2758c0f7", "rot": 14, "bit": 15, "mask": 4, "width": 1}, {"i": 57, "op": "rotr", "dst": 1, "src": 5, "src2": 2, "imm": "0x1f5267b3", "imm2": "0x236f5a27", "rot": 2, "bit": 31, "mask": 16, "width": 1}, - {"i": 58, "op": "load", "dst": 5, "src": 4, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, - {"i": 59, "op": "load", "dst": 6, "src": 2, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, + {"i": 58, "op": "load", "dst": 5, "src": 3, "src2": 3, "imm": "0xa9954a9b", "imm2": "0x6a54d4e8", "rot": 11, "bit": 10, "mask": 16, "width": 1}, + {"i": 59, "op": "load", "dst": 6, "src": 1, "src2": 4, "imm": "0x9923ff88", "imm2": "0x9357254e", "rot": 16, "bit": 1, "mask": 16, "width": 1}, {"i": 60, "op": "mad", "dst": 3, "src": 5, "src2": 0, "imm": "0xc0cc51a6", "imm2": "0x3fd7701b", "rot": 20, "bit": 1, "mask": 4, "width": 1}, {"i": 61, "op": "add", "dst": 5, "src": 7, "src2": 7, "imm": "0xaf9dd72d", "imm2": "0xad7493e7", "rot": 7, "bit": 31, "mask": 16, "width": 1}, {"i": 62, "op": "add", "dst": 4, "src": 6, "src2": 2, "imm": "0x89841d87", "imm2": "0x1e07c3d9", "rot": 6, "bit": 27, "mask": 1, "width": 1}, diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/program.metal b/proto-cuda/packs-ca3-shadow/sh256x88/program.metal index ad068f3b0..5e8dc6a8b 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/program.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x88/program.metal @@ -49,19 +49,19 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -69,13 +69,13 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -87,7 +87,7 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -96,8 +96,8 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/program_bound.metal b/proto-cuda/packs-ca3-shadow/sh256x88/program_bound.metal index 9eac74ef2..a92943d6d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/program_bound.metal +++ b/proto-cuda/packs-ca3-shadow/sh256x88/program_bound.metal @@ -51,19 +51,19 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 8 r6 = rotr_var(r6, r3); // 9 r3 = r3 | r4; // 10 - r4 = r4 ^ dataset[r3 & MASK]; // 11 + r4 = r4 ^ dataset[r6 & MASK]; // 11 r0 = mulhi(r0, r4); // 12 r5 = r5 + r1 + select(0xc7934706u, 0xd3177981u, ((sel >> 30u) & 1u) != 0u); // 13 - r0 = r0 ^ dataset[r4 & MASK]; // 14 + r0 = r0 ^ dataset[r5 & MASK]; // 14 r2 = r2 - r4; // 15 - r2 = r2 ^ dataset[r0 & MASK]; // 16 - r7 = r7 ^ dataset[r2 & MASK]; // 17 + r2 = r2 ^ dataset[r7 & MASK]; // 16 + r7 = r7 ^ dataset[r4 & MASK]; // 17 r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 18 r5 = r5 * r0; // 19 r3 = r3 ^ simd_shuffle_xor(r4, (ushort)2); // 20 r2 = r2 ^ simd_shuffle_xor(r4, (ushort)16); // 21 r6 = mulhi(r6, r2); // 22 - r6 = r6 ^ dataset[r1 & MASK]; // 23 + r6 = r6 ^ dataset[r3 & MASK]; // 23 r5 = r5 * r0; // 24 r5 = rotl_imm(r5, 19u); // 25 r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // 26 @@ -71,13 +71,13 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r0 = r0 ^ r4; // 28 r3 = r3 - r0; // 29 r5 = r5 * r1; // 30 - r7 = r7 ^ dataset[r2 & MASK]; // 31 - r1 = r1 ^ dataset[r0 & MASK]; // 32 + r7 = r7 ^ dataset[r3 & MASK]; // 31 + r1 = r1 ^ dataset[r2 & MASK]; // 32 r5 = r5 ^ r6; // 33 - r5 = r5 ^ dataset[r1 & MASK]; // 34 + r5 = r5 ^ dataset[r0 & MASK]; // 34 r0 = mulhi(r0, r5); // 35 r5 = r5 ^ simd_shuffle_xor(r2, (ushort)4); // 36 - r7 = r7 ^ dataset[r0 & MASK]; // 37 + r7 = r7 ^ dataset[r6 & MASK]; // 37 r3 = r3 + r1 + select(0x75ba2fadu, 0x230c005cu, ((sel >> 27u) & 1u) != 0u); // 38 r1 = r1 ^ simd_shuffle_xor(r5, (ushort)4); // 39 r2 = r2 ^ r5; // 40 @@ -89,7 +89,7 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r1 = mulhi(r1, r5); // 46 r4 = r4 - r3; // 47 r2 = rotr_var(r2, r6); // 48 - r3 = r3 ^ dataset[r5 & MASK]; // 49 + r3 = r3 ^ dataset[r4 & MASK]; // 49 r1 = r1 + r5 + select(0x81b8bc2cu, 0x1907970cu, ((sel >> 7u) & 1u) != 0u); // 50 r0 = r0 * r2; // 51 r0 = r0 + r2 + select(0x4f92b968u, 0x699fd448u, ((sel >> 6u) & 1u) != 0u); // 52 @@ -98,8 +98,8 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], r3 = r3 + r7 + select(0x7b0fe07au, 0xa54c55a0u, ((sel >> 1u) & 1u) != 0u); // 55 r6 = r6 ^ dataset[r7 & MASK]; // 56 r1 = rotr_var(r1, r5); // 57 - r5 = r5 ^ dataset[r4 & MASK]; // 58 - r6 = r6 ^ dataset[r2 & MASK]; // 59 + r5 = r5 ^ dataset[r3 & MASK]; // 58 + r6 = r6 ^ dataset[r1 & MASK]; // 59 r3 = r5 * r0 + r3; // 60 r5 = r5 + r7 + select(0xaf9dd72du, 0xad7493e7u, ((sel >> 31u) & 1u) != 0u); // 61 r4 = r4 + r6 + select(0x89841d87u, 0x1e07c3d9u, ((sel >> 27u) & 1u) != 0u); // 62 diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/vectors.h b/proto-cuda/packs-ca3-shadow/sh256x88/vectors.h index 6b2e73d7a..55135ad63 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/vectors.h +++ b/proto-cuda/packs-ca3-shadow/sh256x88/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x84beec0429c7ef83ull, 0xf00d1a75c1983cc7ull, 0xa90bcc4907b862d3ull, 0xc4878beb87ecd1f8ull, 0xfc91443ee8482aa9ull, 0xcc6dec63ee8af2d2ull, 0x27bb87776a04a4b8ull, 0x52390b4de0bb62a9ull, - 0xccbe1f94b1b40f4full, 0x64baf9332b181a98ull, 0x397d39dc01b32f0eull, 0xa8f87eb4e8bc75deull, 0x6d941c833a2e5badull, 0xc57e923c71cfadedull, 0x6ebb7f26d71568dcull, 0x0dbdc04d57ad57e1ull, - 0xc29faa2c84db2ed7ull, 0x996c05fc549bbb92ull, 0x2fbd7656e887882dull, 0xacd8bcf4005ee812ull, 0x767be8ac588d2e38ull, 0x47ec828643046423ull, 0x4c01d7965ae941c1ull, 0x57c5c70ffbbb0e65ull, - 0x13b17316cb50fb7bull, 0x76a1f54649a370cfull, 0xad69f76836ba8a7aull, 0x733bd56efa378d81ull, 0x981c426d71f2ed8full, 0x54e1d4cbc0a62512ull, 0x67aff49ed29616c6ull, 0x334b204a4a68c30dull + 0x4e64318234942c72ull, 0xd32fdb168ebd4480ull, 0x6a02ae359310ac78ull, 0xad038fc83d25a39cull, 0xf890d0386a7a5499ull, 0x64836880e58ce81eull, 0x740f838c7051cb9cull, 0xa4acf2d3e549a5daull, + 0x8039b03e5895ae6bull, 0x0a60aad58ad27c36ull, 0x72100b423a60d0faull, 0x7240e8147f60833eull, 0x23b9bbed7ea1993bull, 0x36fd90fa1f02c8edull, 0x387122913be5f809ull, 0xd5a4f420bf17ff8eull, + 0x983378a1940aef46ull, 0x22123a1b08a47e3full, 0x5a54e63877b9953eull, 0x1dbd846da35c699aull, 0x21cdd2e69ca2798cull, 0x7dbd40eb1f2da0dbull, 0xa81d12131d5f1a84ull, 0x09cef91af5a74839ull, + 0xccaaa6047d482fefull, 0x633c0c9bfb6f305dull, 0x731678f40bfde42dull, 0x6410a0773de515ccull, 0x42043082ccf18bbdull, 0x926dc795c99303beull, 0xc7bfc1861a1f2e81ull, 0xc1e77d7251cec9ceull }, { // base nonce 4096 - 0x32be0f5b7d992255ull, 0x015d46bc9c3a63e5ull, 0xd484e83305387249ull, 0xbd6caf73759993a4ull, 0xa45046fe4ffea71cull, 0x998be3d8bc3b6b83ull, 0x22733e1011bb3899ull, 0xd43f643f374ec091ull, - 0x58af12ece0d06893ull, 0xc2c70d187309237dull, 0xc63a383d3e949238ull, 0x6021dfa5644f37d6ull, 0x98403c9184ee7f9aull, 0x41918aa77c615242ull, 0x4521bda069686b99ull, 0x063ad2e6be2a91b9ull, - 0xf4e60507ea9cebe7ull, 0x1af1193c38198412ull, 0xe888f6fb01c7122cull, 0x64ba2c1961141fa6ull, 0xc86cd2ac3841a269ull, 0x3488615eda9032dfull, 0xdf7cd491843ee85cull, 0x6661e8614d9e6c8bull, - 0x3cf20cd75714f0c0ull, 0xc494aa0916c00aefull, 0x659a06ca296e221cull, 0x55641c3a74d4078aull, 0xb4c4cde4ab6c19e2ull, 0xeeb96f46b670a71full, 0x2876607f7e2ea1c3ull, 0x2c8dbd443403bc84ull + 0x79df1e7b1beb1213ull, 0x2d273d56dd5200e7ull, 0x5e1b4113f6bc264cull, 0xf77f629627462121ull, 0x4fc2b35a1904d1a7ull, 0x6810c18bf5581a8aull, 0xb332000f56b4e12eull, 0xc1b025ff62403b33ull, + 0x20d84642f49f823full, 0x75d45f0c9f423cd8ull, 0xc756a54d47bd55d7ull, 0xbd2fc6f009ae7d55ull, 0x2ee1390bf34be77dull, 0x2a69582f4aadcf47ull, 0x654b6ab8c8fa0677ull, 0x2e59a9ba14c510c9ull, + 0x002d9bc041f88540ull, 0xe968fc417135e8c8ull, 0xa66eaf92795a4ab2ull, 0xe3eb3ffac1b700c7ull, 0x0f8fd4c924174251ull, 0x2616a50fbbee50cdull, 0xa3e9cafe7a137d18ull, 0xa6a6017e1d18ce0cull, + 0x1943bdfe7a875a10ull, 0x767e42ddba3b0f06ull, 0xb86f041b1ff5b12bull, 0x1adbda14a1f697fcull, 0xc0ef3be5f0768eddull, 0x79a57b9dda53fe92ull, 0x0c99bd453acb2340ull, 0xbd4bfc19881a5c27ull }, { // base nonce 1000000 - 0x78541813d6547a59ull, 0x4048c2a56e0aeb32ull, 0xdde4ab04573bd691ull, 0x2efd693c76d79f20ull, 0xf2c68f0fe9a342d3ull, 0x35da60ca90cbe845ull, 0x36798fb3123a26c0ull, 0x0d889aeaaec59a84ull, - 0xe2a0581848e9bc0bull, 0xed7a2887d34e286aull, 0x7f933c3acbcae9d4ull, 0x11be5af68c3a8bd2ull, 0xee163f620d49e2daull, 0xa959ae35321ed248ull, 0xecbbfca1292bdaccull, 0x7ce337105114c1c4ull, - 0xc73aafe51ed8fde3ull, 0x760fdbb27982fcbdull, 0xb9b573c20dc494c2ull, 0x55f9c2d1ef8cc32dull, 0x2af4bfeea1c32c93ull, 0x3fe179c0b56193aeull, 0x92bff7aaec5b772full, 0x80271a03ee19287cull, - 0x4b98c3ac7191efc4ull, 0xe36245f5d990f94bull, 0x2f7c0ed899091a02ull, 0xfbf09b3a6f2fb8dbull, 0x07ff9acffccbf012ull, 0xdcd9727fe482d3e3ull, 0xcae6d467f721bb31ull, 0xfd7fb2e05bbc316full + 0x129fdfb505d8affeull, 0x2cc0a7c8fd1b1f35ull, 0x953f1545253bb0ebull, 0x4a736f04c55d047cull, 0x1fc7cc8c3656890eull, 0x95ebc86278e85c75ull, 0x1f1141b16359ec41ull, 0xfa45a8846231572cull, + 0x79117cc8c0b33d68ull, 0xc588cf4d6ae802d1ull, 0xf60b0cda9cb25e9bull, 0xffe590410f314156ull, 0xdacc186be7ae2b77ull, 0x1b768aca0a6bcf89ull, 0x50b39f3bfe9f9b55ull, 0x13f9d0bbccc7a3ebull, + 0xbf1ae5ca14c1d5b4ull, 0x8855bf4bc3d9a4e2ull, 0x86f148623f1cd498ull, 0x9becef62ac65ab24ull, 0xcccd6eb1fbd50eecull, 0xc2a1f71e6fdefbeaull, 0x3bb376588202c20eull, 0x4eb08fd8d6e3aabfull, + 0xa244a5410b77be38ull, 0x5c6a15b6a4a42a38ull, 0x2b83d3e8bc9108c5ull, 0x7b5e1db001e3d387ull, 0x34bae1d26c20bba2ull, 0x8b54b1dae16d1fb4ull, 0x932b4f9e3cb2643aull, 0x884e120050b465b7ull } }; diff --git a/proto-cuda/packs-ca3-shadow/sh256x88/vectors.json b/proto-cuda/packs-ca3-shadow/sh256x88/vectors.json index e8fe6391a..0bb4a469d 100644 --- a/proto-cuda/packs-ca3-shadow/sh256x88/vectors.json +++ b/proto-cuda/packs-ca3-shadow/sh256x88/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v2, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x84beec0429c7ef83", "0xf00d1a75c1983cc7", "0xa90bcc4907b862d3", "0xc4878beb87ecd1f8", "0xfc91443ee8482aa9", "0xcc6dec63ee8af2d2", "0x27bb87776a04a4b8", "0x52390b4de0bb62a9", - "0xccbe1f94b1b40f4f", "0x64baf9332b181a98", "0x397d39dc01b32f0e", "0xa8f87eb4e8bc75de", "0x6d941c833a2e5bad", "0xc57e923c71cfaded", "0x6ebb7f26d71568dc", "0x0dbdc04d57ad57e1", - "0xc29faa2c84db2ed7", "0x996c05fc549bbb92", "0x2fbd7656e887882d", "0xacd8bcf4005ee812", "0x767be8ac588d2e38", "0x47ec828643046423", "0x4c01d7965ae941c1", "0x57c5c70ffbbb0e65", - "0x13b17316cb50fb7b", "0x76a1f54649a370cf", "0xad69f76836ba8a7a", "0x733bd56efa378d81", "0x981c426d71f2ed8f", "0x54e1d4cbc0a62512", "0x67aff49ed29616c6", "0x334b204a4a68c30d" + "0x4e64318234942c72", "0xd32fdb168ebd4480", "0x6a02ae359310ac78", "0xad038fc83d25a39c", "0xf890d0386a7a5499", "0x64836880e58ce81e", "0x740f838c7051cb9c", "0xa4acf2d3e549a5da", + "0x8039b03e5895ae6b", "0x0a60aad58ad27c36", "0x72100b423a60d0fa", "0x7240e8147f60833e", "0x23b9bbed7ea1993b", "0x36fd90fa1f02c8ed", "0x387122913be5f809", "0xd5a4f420bf17ff8e", + "0x983378a1940aef46", "0x22123a1b08a47e3f", "0x5a54e63877b9953e", "0x1dbd846da35c699a", "0x21cdd2e69ca2798c", "0x7dbd40eb1f2da0db", "0xa81d12131d5f1a84", "0x09cef91af5a74839", + "0xccaaa6047d482fef", "0x633c0c9bfb6f305d", "0x731678f40bfde42d", "0x6410a0773de515cc", "0x42043082ccf18bbd", "0x926dc795c99303be", "0xc7bfc1861a1f2e81", "0xc1e77d7251cec9ce" ]}, {"base_nonce": 4096, "expected": [ - "0x32be0f5b7d992255", "0x015d46bc9c3a63e5", "0xd484e83305387249", "0xbd6caf73759993a4", "0xa45046fe4ffea71c", "0x998be3d8bc3b6b83", "0x22733e1011bb3899", "0xd43f643f374ec091", - "0x58af12ece0d06893", "0xc2c70d187309237d", "0xc63a383d3e949238", "0x6021dfa5644f37d6", "0x98403c9184ee7f9a", "0x41918aa77c615242", "0x4521bda069686b99", "0x063ad2e6be2a91b9", - "0xf4e60507ea9cebe7", "0x1af1193c38198412", "0xe888f6fb01c7122c", "0x64ba2c1961141fa6", "0xc86cd2ac3841a269", "0x3488615eda9032df", "0xdf7cd491843ee85c", "0x6661e8614d9e6c8b", - "0x3cf20cd75714f0c0", "0xc494aa0916c00aef", "0x659a06ca296e221c", "0x55641c3a74d4078a", "0xb4c4cde4ab6c19e2", "0xeeb96f46b670a71f", "0x2876607f7e2ea1c3", "0x2c8dbd443403bc84" + "0x79df1e7b1beb1213", "0x2d273d56dd5200e7", "0x5e1b4113f6bc264c", "0xf77f629627462121", "0x4fc2b35a1904d1a7", "0x6810c18bf5581a8a", "0xb332000f56b4e12e", "0xc1b025ff62403b33", + "0x20d84642f49f823f", "0x75d45f0c9f423cd8", "0xc756a54d47bd55d7", "0xbd2fc6f009ae7d55", "0x2ee1390bf34be77d", "0x2a69582f4aadcf47", "0x654b6ab8c8fa0677", "0x2e59a9ba14c510c9", + "0x002d9bc041f88540", "0xe968fc417135e8c8", "0xa66eaf92795a4ab2", "0xe3eb3ffac1b700c7", "0x0f8fd4c924174251", "0x2616a50fbbee50cd", "0xa3e9cafe7a137d18", "0xa6a6017e1d18ce0c", + "0x1943bdfe7a875a10", "0x767e42ddba3b0f06", "0xb86f041b1ff5b12b", "0x1adbda14a1f697fc", "0xc0ef3be5f0768edd", "0x79a57b9dda53fe92", "0x0c99bd453acb2340", "0xbd4bfc19881a5c27" ]}, {"base_nonce": 1000000, "expected": [ - "0x78541813d6547a59", "0x4048c2a56e0aeb32", "0xdde4ab04573bd691", "0x2efd693c76d79f20", "0xf2c68f0fe9a342d3", "0x35da60ca90cbe845", "0x36798fb3123a26c0", "0x0d889aeaaec59a84", - "0xe2a0581848e9bc0b", "0xed7a2887d34e286a", "0x7f933c3acbcae9d4", "0x11be5af68c3a8bd2", "0xee163f620d49e2da", "0xa959ae35321ed248", "0xecbbfca1292bdacc", "0x7ce337105114c1c4", - "0xc73aafe51ed8fde3", "0x760fdbb27982fcbd", "0xb9b573c20dc494c2", "0x55f9c2d1ef8cc32d", "0x2af4bfeea1c32c93", "0x3fe179c0b56193ae", "0x92bff7aaec5b772f", "0x80271a03ee19287c", - "0x4b98c3ac7191efc4", "0xe36245f5d990f94b", "0x2f7c0ed899091a02", "0xfbf09b3a6f2fb8db", "0x07ff9acffccbf012", "0xdcd9727fe482d3e3", "0xcae6d467f721bb31", "0xfd7fb2e05bbc316f" + "0x129fdfb505d8affe", "0x2cc0a7c8fd1b1f35", "0x953f1545253bb0eb", "0x4a736f04c55d047c", "0x1fc7cc8c3656890e", "0x95ebc86278e85c75", "0x1f1141b16359ec41", "0xfa45a8846231572c", + "0x79117cc8c0b33d68", "0xc588cf4d6ae802d1", "0xf60b0cda9cb25e9b", "0xffe590410f314156", "0xdacc186be7ae2b77", "0x1b768aca0a6bcf89", "0x50b39f3bfe9f9b55", "0x13f9d0bbccc7a3eb", + "0xbf1ae5ca14c1d5b4", "0x8855bf4bc3d9a4e2", "0x86f148623f1cd498", "0x9becef62ac65ab24", "0xcccd6eb1fbd50eec", "0xc2a1f71e6fdefbea", "0x3bb376588202c20e", "0x4eb08fd8d6e3aabf", + "0xa244a5410b77be38", "0x5c6a15b6a4a42a38", "0x2b83d3e8bc9108c5", "0x7b5e1db001e3d387", "0x34bae1d26c20bba2", "0x8b54b1dae16d1fb4", "0x932b4f9e3cb2643a", "0x884e120050b465b7" ]} ], "dataset_head": ["0xfdad4319", "0x1a7b68e1", "0xde6db608", "0x13d73892", "0xd17f447a", "0xb2221ccf", "0x9db004bd", "0x57d7d367", "0xdbc4cf34", "0x697c009a", "0xc43af1d4", "0x97f12b2e", "0x74c37cd0", "0xc651ea15", "0x665a6d29", "0x22330a2d"], diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cl b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cl index 8860b09f9..f3bd69ba5 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cu b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cu index 74f18d5a6..bc7e7ebc6 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cl index 30d551532..d54070789 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cu index 9b0644623..381756885 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.h b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.h index 797566612..74dca4aa4 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.h +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x9ad30d99u #define IGNEUM_ERA_STRIDE_ROT 29 #define IGNEUM_ERA_INTERLEAVE { 0, 2, 12, 13 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.json b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.json index 0df7ca434..16211bc41 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.json +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", "load_class": "mx8-erad810f22d+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.metal b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.metal index 695629bf9..c23b75c2e 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program_bound.metal index 8378806cd..2d5209c8b 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x9ad30d99u, 29u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x9ad30d99u, 29u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x9ad30d99u, 29u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.h b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.h index 15de69d34..3706c598b 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xcefc114b62c2013bull, 0x82df54bee88f1fa9ull, 0x94ed24d32cecf436ull, 0x8a9bd67e3fed0c5bull, 0x7c1a21514ebe42b7ull, 0x0edd5b084c5815edull, 0x077927721192da87ull, 0x28e26e3eb72cd8c4ull, - 0xbc7f3f9fd6f31019ull, 0x9760c30962c54b67ull, 0x1d3973217b0f60e9ull, 0xb9dce5f8dbc47f84ull, 0xf48230bc1c38a8a6ull, 0xab2be58a952ee580ull, 0x063033462d39b5faull, 0x63ca56a0425cd505ull, - 0xc8c1e7342452a6d5ull, 0xe936506b6f9c5859ull, 0xbe73aaebab23a47dull, 0x185855356357c704ull, 0x8e4d10d9f929e4c6ull, 0x8162627beec866c7ull, 0x5bfae763cdba41f4ull, 0xbd133821e099c624ull, - 0x11a8f07f88a424aaull, 0x9f872faaa642d022ull, 0xe02e4e5a55e161bbull, 0xec4674b8e19443a3ull, 0xcb09ce61d2a7a482ull, 0x246fc454a58d9623ull, 0xe4e9d962e94f9d44ull, 0xea8f7e5f79b3cd6cull + 0xb9034ec6711e5facull, 0x3b65da691cea9030ull, 0x7b301843257b4173ull, 0x713bf5a5f38ccf4full, 0x6c9c3fd5c15f968eull, 0x2d94c255d425ed0eull, 0x8d033249c0e58699ull, 0x7aa65017b710b983ull, + 0x973b1d8a1da0bdb3ull, 0x7ec9dc4b566a81b1ull, 0x150979b82faa600full, 0xd5740bf45f08e654ull, 0x5528af13c00bcc3dull, 0x268afd261090be98ull, 0x6ef15127533eea28ull, 0x5f88019cbd228bc7ull, + 0x75e6c5ccc55416e9ull, 0x5ee9a2c1ecb2158aull, 0x6ab3c45b65c29b47ull, 0x4bd3ac4e709cfefdull, 0x61ce3e84a909bd39ull, 0x3edd286e7bdb497full, 0xe74e6dde7048febeull, 0x2cdd8f9d358d4900ull, + 0xe9a26cb57e5e6e4cull, 0xf7416fc907a6021aull, 0xe41fd2f41763f29full, 0xa69d1cdad4d28b05ull, 0x623b6d8ee6c254c0ull, 0x54dfe10b503e014eull, 0xe7f3412da6be7d86ull, 0x213e90469133f321ull }, { // base nonce 4096 - 0x72369740c7e914faull, 0x4e26670191e736b1ull, 0xfd0539ebd2476ba2ull, 0xbe026940c9b9b0cfull, 0x173cb4ffa35536dbull, 0x7a8c9f39fee473c8ull, 0xf1edbc92d4cf8fa7ull, 0x94cafcf8fe4d3484ull, - 0xaf52574e663f35d4ull, 0x3bfb83843cd530d1ull, 0x2276280eeb130699ull, 0x15363890a20c32c8ull, 0xfef7c4da969248c5ull, 0x53a0e23bb0180cbbull, 0x282baa859711bdcfull, 0x6b4175f6beb71cddull, - 0xa4e2f89843daa5b2ull, 0x9869cfcd682cb892ull, 0x8cb61b6583116468ull, 0x6a229c5101f56038ull, 0x16879e17e3a67e45ull, 0x0bfd173dfec23e7dull, 0x163009720a7cbe26ull, 0xc981a122be3e093eull, - 0xc8b10d937fd4fd68ull, 0x046db9ec4d476d23ull, 0x24d7d036955fc12aull, 0x6d4a7f64498eb506ull, 0x4bc021381be82d8dull, 0x8b53fe60b02ff39eull, 0x4f4aa55e80356ed4ull, 0xb87adc5371e0d7f3ull + 0x0abb1a33c33fed29ull, 0x40acb8def3182680ull, 0x675db8c94a10fe90ull, 0xdb908aebe430d846ull, 0x13e90dfc31ae0dc2ull, 0x251b48fb47b2efd6ull, 0x25ba483b581d066dull, 0xc46aa67187e2a4b8ull, + 0x9a74429f6cd66397ull, 0xc878d2f559c74e4cull, 0x25cd89ed15b7341dull, 0x11927a7fb04b26d9ull, 0x74a13ce8a36afb4dull, 0x147a25ddeadb0c66ull, 0xe75d2b6ee3b5070aull, 0x0daccd94c68c5f5cull, + 0xebbb7b1640189a85ull, 0x1db2520374cb70daull, 0x8838b438566d7ed8ull, 0x92a398ee06882414ull, 0xe7fa6b03fe98186eull, 0xc3a81a28ebfe6b0eull, 0x970b159a800539b5ull, 0x2827315a44d52b00ull, + 0x51a12b1836476b78ull, 0x95bed1e378db02a1ull, 0xabf6a2fb188a6b44ull, 0xb753403d29a19cc4ull, 0x6e833396b29fe244ull, 0x6596073c01686655ull, 0x53bb903a73881fd0ull, 0x4f5a08344ede11e9ull }, { // base nonce 1000000 - 0xed8dab53b5e8e8edull, 0xa9094d1bb25a004eull, 0x26ec1cf0f7dbc177ull, 0x27a48a41c3b4e0d4ull, 0x56e048da75af2d13ull, 0xfedf9d48b3ed20d4ull, 0x68ab0258d0717aa6ull, 0x350a3144bf94e1c1ull, - 0x001a69003600a82full, 0x14ad260948d3e939ull, 0x5e255b44fd3e47b7ull, 0x53b5103bdee253beull, 0xc8cf96e4e28c7827ull, 0x10714ce66ccdbf82ull, 0x970092db360dd3c8ull, 0x0910d973b2114663ull, - 0x5755d28da59e923full, 0x867d702953278b8eull, 0x24d34058189ed262ull, 0xa38e73420b9e0405ull, 0xfdb7f7ceb03ae23bull, 0xf0e19d50f68941fdull, 0x0745a1fbcd7c081bull, 0xf56202c4322ddc9full, - 0x7754d69c1e232baeull, 0x8f769e87329523f7ull, 0x72005edcdb8bbe99ull, 0x1cc4600ef8652eb6ull, 0x9edcc4a4a846dd5cull, 0x16d2ba401de9992cull, 0x41ea900971c6a4f4ull, 0xc06178510e3ce787ull + 0x02493ab815583376ull, 0x8d9a7ff0fdf16442ull, 0x908d52ce709dbb1dull, 0x1c69e3e6d883b9b9ull, 0x7e55155355078823ull, 0x466083cea4ecba2eull, 0xd860a395df3d66dbull, 0x6cada4840fc1d081ull, + 0x1ef2ece8ea806bc6ull, 0x307fdd310a269ab6ull, 0x8dfcd78bcee2acdbull, 0x8c115ab38668fc7dull, 0xbcd5f7aeba052ad5ull, 0x8b10a6055c905b90ull, 0x3969e34ac3021036ull, 0xf7f4b601c8a76e98ull, + 0x55fcf6a8ec630592ull, 0xccb811f1351524f8ull, 0x1360c0a14f7735bbull, 0x2ab06c8ca4f045a0ull, 0xef6d642b91b98179ull, 0xa0b7f593a6c5a093ull, 0xe1aa8b798594627dull, 0x709cc4b4fda01c96ull, + 0x92cb5eaf81e5d25bull, 0x7c49cfb8b3581e4cull, 0xc650dc1450b0944aull, 0xe0cb41c8cf857b42ull, 0xcb39f235a32429d4ull, 0xdd2258f3569632dcull, 0x1f8fa5377e178ebeull, 0x5a7f6378f386d557ull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.json b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.json index 91635da08..4e0236188 100644 --- a/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-devnet-epoch0/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xcefc114b62c2013b", "0x82df54bee88f1fa9", "0x94ed24d32cecf436", "0x8a9bd67e3fed0c5b", "0x7c1a21514ebe42b7", "0x0edd5b084c5815ed", "0x077927721192da87", "0x28e26e3eb72cd8c4", - "0xbc7f3f9fd6f31019", "0x9760c30962c54b67", "0x1d3973217b0f60e9", "0xb9dce5f8dbc47f84", "0xf48230bc1c38a8a6", "0xab2be58a952ee580", "0x063033462d39b5fa", "0x63ca56a0425cd505", - "0xc8c1e7342452a6d5", "0xe936506b6f9c5859", "0xbe73aaebab23a47d", "0x185855356357c704", "0x8e4d10d9f929e4c6", "0x8162627beec866c7", "0x5bfae763cdba41f4", "0xbd133821e099c624", - "0x11a8f07f88a424aa", "0x9f872faaa642d022", "0xe02e4e5a55e161bb", "0xec4674b8e19443a3", "0xcb09ce61d2a7a482", "0x246fc454a58d9623", "0xe4e9d962e94f9d44", "0xea8f7e5f79b3cd6c" + "0xb9034ec6711e5fac", "0x3b65da691cea9030", "0x7b301843257b4173", "0x713bf5a5f38ccf4f", "0x6c9c3fd5c15f968e", "0x2d94c255d425ed0e", "0x8d033249c0e58699", "0x7aa65017b710b983", + "0x973b1d8a1da0bdb3", "0x7ec9dc4b566a81b1", "0x150979b82faa600f", "0xd5740bf45f08e654", "0x5528af13c00bcc3d", "0x268afd261090be98", "0x6ef15127533eea28", "0x5f88019cbd228bc7", + "0x75e6c5ccc55416e9", "0x5ee9a2c1ecb2158a", "0x6ab3c45b65c29b47", "0x4bd3ac4e709cfefd", "0x61ce3e84a909bd39", "0x3edd286e7bdb497f", "0xe74e6dde7048febe", "0x2cdd8f9d358d4900", + "0xe9a26cb57e5e6e4c", "0xf7416fc907a6021a", "0xe41fd2f41763f29f", "0xa69d1cdad4d28b05", "0x623b6d8ee6c254c0", "0x54dfe10b503e014e", "0xe7f3412da6be7d86", "0x213e90469133f321" ]}, {"base_nonce": 4096, "expected": [ - "0x72369740c7e914fa", "0x4e26670191e736b1", "0xfd0539ebd2476ba2", "0xbe026940c9b9b0cf", "0x173cb4ffa35536db", "0x7a8c9f39fee473c8", "0xf1edbc92d4cf8fa7", "0x94cafcf8fe4d3484", - "0xaf52574e663f35d4", "0x3bfb83843cd530d1", "0x2276280eeb130699", "0x15363890a20c32c8", "0xfef7c4da969248c5", "0x53a0e23bb0180cbb", "0x282baa859711bdcf", "0x6b4175f6beb71cdd", - "0xa4e2f89843daa5b2", "0x9869cfcd682cb892", "0x8cb61b6583116468", "0x6a229c5101f56038", "0x16879e17e3a67e45", "0x0bfd173dfec23e7d", "0x163009720a7cbe26", "0xc981a122be3e093e", - "0xc8b10d937fd4fd68", "0x046db9ec4d476d23", "0x24d7d036955fc12a", "0x6d4a7f64498eb506", "0x4bc021381be82d8d", "0x8b53fe60b02ff39e", "0x4f4aa55e80356ed4", "0xb87adc5371e0d7f3" + "0x0abb1a33c33fed29", "0x40acb8def3182680", "0x675db8c94a10fe90", "0xdb908aebe430d846", "0x13e90dfc31ae0dc2", "0x251b48fb47b2efd6", "0x25ba483b581d066d", "0xc46aa67187e2a4b8", + "0x9a74429f6cd66397", "0xc878d2f559c74e4c", "0x25cd89ed15b7341d", "0x11927a7fb04b26d9", "0x74a13ce8a36afb4d", "0x147a25ddeadb0c66", "0xe75d2b6ee3b5070a", "0x0daccd94c68c5f5c", + "0xebbb7b1640189a85", "0x1db2520374cb70da", "0x8838b438566d7ed8", "0x92a398ee06882414", "0xe7fa6b03fe98186e", "0xc3a81a28ebfe6b0e", "0x970b159a800539b5", "0x2827315a44d52b00", + "0x51a12b1836476b78", "0x95bed1e378db02a1", "0xabf6a2fb188a6b44", "0xb753403d29a19cc4", "0x6e833396b29fe244", "0x6596073c01686655", "0x53bb903a73881fd0", "0x4f5a08344ede11e9" ]}, {"base_nonce": 1000000, "expected": [ - "0xed8dab53b5e8e8ed", "0xa9094d1bb25a004e", "0x26ec1cf0f7dbc177", "0x27a48a41c3b4e0d4", "0x56e048da75af2d13", "0xfedf9d48b3ed20d4", "0x68ab0258d0717aa6", "0x350a3144bf94e1c1", - "0x001a69003600a82f", "0x14ad260948d3e939", "0x5e255b44fd3e47b7", "0x53b5103bdee253be", "0xc8cf96e4e28c7827", "0x10714ce66ccdbf82", "0x970092db360dd3c8", "0x0910d973b2114663", - "0x5755d28da59e923f", "0x867d702953278b8e", "0x24d34058189ed262", "0xa38e73420b9e0405", "0xfdb7f7ceb03ae23b", "0xf0e19d50f68941fd", "0x0745a1fbcd7c081b", "0xf56202c4322ddc9f", - "0x7754d69c1e232bae", "0x8f769e87329523f7", "0x72005edcdb8bbe99", "0x1cc4600ef8652eb6", "0x9edcc4a4a846dd5c", "0x16d2ba401de9992c", "0x41ea900971c6a4f4", "0xc06178510e3ce787" + "0x02493ab815583376", "0x8d9a7ff0fdf16442", "0x908d52ce709dbb1d", "0x1c69e3e6d883b9b9", "0x7e55155355078823", "0x466083cea4ecba2e", "0xd860a395df3d66db", "0x6cada4840fc1d081", + "0x1ef2ece8ea806bc6", "0x307fdd310a269ab6", "0x8dfcd78bcee2acdb", "0x8c115ab38668fc7d", "0xbcd5f7aeba052ad5", "0x8b10a6055c905b90", "0x3969e34ac3021036", "0xf7f4b601c8a76e98", + "0x55fcf6a8ec630592", "0xccb811f1351524f8", "0x1360c0a14f7735bb", "0x2ab06c8ca4f045a0", "0xef6d642b91b98179", "0xa0b7f593a6c5a093", "0xe1aa8b798594627d", "0x709cc4b4fda01c96", + "0x92cb5eaf81e5d25b", "0x7c49cfb8b3581e4c", "0xc650dc1450b0944a", "0xe0cb41c8cf857b42", "0xcb39f235a32429d4", "0xdd2258f3569632dc", "0x1f8fa5377e178ebe", "0x5a7f6378f386d557" ]} ], "dataset_head": ["0x19c6837f", "0xdf3adfb8", "0xbd3f6aed", "0xb8bede0d", "0xc5f0629f", "0x03e38ae8", "0xc435a60e", "0xfadee916", "0x827e59af", "0x8cf592f5", "0x60286061", "0x5d9abc1c", "0xa85d0c39", "0x4247a100", "0xd41a5b0d", "0x3f33dc64"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cl index ec346a73c..c41c07a68 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cu index 3b7fe1322..d961bac97 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-0/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cl index f68444176..74ce1b64b 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cu index 60bfb1fc7..eab526305 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-0/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/program.h b/proto-cuda/packs-ca3-v4/v4-era-0/program.h index 12e272815..961299f34 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-0/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "8bffdd3366b9c3ffe89c1231e91538d531cfa717307df5c48ccba43096e17212" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x625e5ab3u #define IGNEUM_ERA_STRIDE_ROT 19 #define IGNEUM_ERA_INTERLEAVE { 0, 2, 10, 15 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/program.json b/proto-cuda/packs-ca3-v4/v4-era-0/program.json index 0f1becba3..e48c4856f 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-0/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "8bffdd3366b9c3ffe89c1231e91538d531cfa717307df5c48ccba43096e17212", "load_class": "mx8-erab2ed8a89+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/program.metal b/proto-cuda/packs-ca3-v4/v4-era-0/program.metal index 8eb97ed01..b0902d10d 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-0/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-0/program_bound.metal index a273a20c9..a7696dcc8 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-0/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x625e5ab3u, 19u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x625e5ab3u, 19u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x625e5ab3u, 19u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-0/vectors.h index 84254f8d6..d7b365e4c 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-0/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xc6ac65d8c667c94bull, 0x423ba68373b366fbull, 0x21eb7c55ad8be449ull, 0x241e717cf2ab882aull, 0xa615906f3f9be2ceull, 0xce309393aa36b7efull, 0x6243ddb51a337304ull, 0xe0495ce514ee4267ull, - 0xf479942a15b82d19ull, 0x3484f32ff6dcf936ull, 0x3d485cd36298b5daull, 0xcdb8c5017040e9edull, 0xed23ab1ee79266d1ull, 0x1a56ee16d69ad2a3ull, 0x0646e3397a174f83ull, 0x98ea781f02a5071aull, - 0x8c77f5c840d7762full, 0x4720419c079f4b89ull, 0xa9b0e2c3c07d9885ull, 0x612ecd1ff4ecd3c5ull, 0x254f3b36ad521004ull, 0x46d1f55d10cac72dull, 0xd7a5ba62b5d9315dull, 0xeac91757fb066b5full, - 0x84f6904c2da56898ull, 0x06efd77b90561e3cull, 0x9e152e00cd51627bull, 0x708c82cc2f545ca5ull, 0x7fb90cbb65b09681ull, 0x1a170cf306c6b81cull, 0x3d5fa555658bc6bfull, 0xb1dbc3e905378746ull + 0xb3a9a56cd6262839ull, 0x9647a7f847f7b325ull, 0x564b5523fff06340ull, 0xc6b94f272c812a6full, 0x00ba391677bde6f7ull, 0x48b1e3d9ec8e190aull, 0x9323412d568f9ad3ull, 0x7df41522e473a8a6ull, + 0xaac4056991cc3405ull, 0x71e7a72beb505030ull, 0xa35319b04b4e4ebcull, 0xf349e07c1aa5d583ull, 0xf4c43b4c2cd64f87ull, 0x4e9f50752f13feccull, 0xfa0efdaa136b1e4eull, 0xf9ee1ad7daca0341ull, + 0xd7e56db6f446d928ull, 0x80adf5c0a46f57bdull, 0xfe5d70ff9519f0aeull, 0x3a05fd971f2d2b84ull, 0x63fd27f5a142a2e7ull, 0xa4e7026d85ef279bull, 0x19f39e118a13a03cull, 0xc1492288692aa3c2ull, + 0x53167ff9a20ff7f2ull, 0xcbb8c81293e3dd73ull, 0x48c86a037d9d2df9ull, 0x64a4bd23551fb76eull, 0x793b72a3533c1df5ull, 0x7813144720ffde55ull, 0x76e43fadd4811e1cull, 0xb25190d644354880ull }, { // base nonce 4096 - 0x3be623a0f075d1f3ull, 0x2552e70de3533e93ull, 0x4c58e7fac79e754dull, 0x4c6ce1acd35693f6ull, 0x9c356bcd5f1d4639ull, 0x29361be2e3fa88efull, 0x8a1878dfba4b4637ull, 0x9289b157d1a01a8cull, - 0x70a4b5646d471b8eull, 0xcf1595ab96209aa0ull, 0xe83503a00680799aull, 0x7c1179b26025fcb4ull, 0x5a7aa05cd428f182ull, 0x02466e4a89473e34ull, 0xbd379fafb5889deeull, 0x914679b7d4a92eceull, - 0x71b1611d70b03bd4ull, 0x9b6ec7ca5afd24dbull, 0x955f2305b288ef17ull, 0x456aeb62e25e0a8cull, 0x40724ed4d6c72cc7ull, 0xf520227cecca4067ull, 0x92146b6c5d82408full, 0xbacdfeaa3693bba5ull, - 0xb50a632febcaff29ull, 0x60bfffcb8b540752ull, 0x3eb9dbc42fc7b9d9ull, 0x73fd73c129763cd9ull, 0x701a9ec7130c5833ull, 0x02845e3260dbb636ull, 0x3b15ad42edfd3e74ull, 0x531d777ef600ee58ull + 0x35813a1d007cc4fcull, 0xbf6038d6d7c608c2ull, 0xc700ed43d0c221a6ull, 0x8201f42c036a6973ull, 0xf3a5ed87522d4457ull, 0xd37336f086cea31bull, 0xbd07db8b671cba07ull, 0x88d71b593dbb4d79ull, + 0xb5dd7efa2dc38724ull, 0xd7ceac05ede80cb1ull, 0xa2be5e0eeb558be3ull, 0x4b223a2da3b1cbfaull, 0xe80a880e8c423b58ull, 0xf72e6726f6dd2cedull, 0x4f4a249ec493e01aull, 0xc3f3e9d9ed2557b6ull, + 0x7a1975bb4a421973ull, 0x6b530daddda86c5eull, 0xcc9c310997045fd4ull, 0xc7883cd20e1175a5ull, 0xc57e2ccc938321b6ull, 0x95e590fbb7745b98ull, 0x73841df2638f1939ull, 0x9424cb4cd3912794ull, + 0xa55f44b470857c26ull, 0xe4cb5e800792abebull, 0xed0d57d573ca2667ull, 0x73fba711d826246full, 0x3a84b0f691909d4cull, 0x776c3141730962a3ull, 0xd0d78d5ddb93529cull, 0x2fffc4d89eab7b0eull }, { // base nonce 1000000 - 0xde8458bcb18fb637ull, 0x0206b58b1f067ff0ull, 0xe107cdd0e87d28aeull, 0x49fef7f22bc586d4ull, 0xff64163d017070ccull, 0x968adfe921ccec1bull, 0xe9560f8a3fa830daull, 0x5d6f239c97224957ull, - 0xcc2f980c31f7c7e5ull, 0x4d7cd09c7b731241ull, 0x5b1841dcfa517b45ull, 0xabd19c355dd4723full, 0x316eaf5ba7e30331ull, 0xec8156a374468b8dull, 0x0e3505a1ec9fe2a1ull, 0x5f1f5a94a69a1178ull, - 0xd4e6f7fda43c5056ull, 0x5ce560511eddb335ull, 0x88180b5ce94621cfull, 0xb1095ce2dc071b55ull, 0xded0110936b4cf80ull, 0x43d2bbff72e231bcull, 0xdd2bae28dbc4a9feull, 0x1c5055680fc7bca6ull, - 0x1917e8e4e79db0adull, 0xb4f64af4d8f8a7c2ull, 0xd6df5b0607279b60ull, 0x3da81ec2899f8314ull, 0x384c998c46ab8b80ull, 0x7c8ada8b7ca44cd5ull, 0x1346a6394b7e4e05ull, 0x4e9868001eb79a14ull + 0x17881d377595f04eull, 0xc871723058cb5d50ull, 0x4abf11697cb006abull, 0xaec0866dd6e5ad07ull, 0x841be78533292829ull, 0xad66114389a58451ull, 0xe2334630db45f4c8ull, 0xf1070ddd26c0026full, + 0xb579139914ec135cull, 0xbe47563f4c0a7866ull, 0xc4546a5054a3083bull, 0xcff83f4ce6ff9935ull, 0x4d5b18143981fd4eull, 0x64ae78e02c05c6d4ull, 0x6c5b9b35a7910710ull, 0xedf6034405a57daeull, + 0x90dc45a093cfdb4aull, 0x8191ad8ee229568eull, 0xc6d768fd41832f4aull, 0xa27592dde1e532afull, 0x051f489cf807aee0ull, 0xdcfcbc9fc6de509eull, 0x3a9e85b4bb2c9e9bull, 0xd00110ad255f826dull, + 0x4e8ce146e485efd4ull, 0x31833f529fc93b2full, 0x866f00944db10630ull, 0xed23b5114f69e28cull, 0x4dc9486df35eabd2ull, 0x8ea710f6445acecaull, 0xf475659cf080d0abull, 0x995c17d2590c8c3cull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-0/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-0/vectors.json index 832538fa7..ce7355389 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-0/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-0/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xc6ac65d8c667c94b", "0x423ba68373b366fb", "0x21eb7c55ad8be449", "0x241e717cf2ab882a", "0xa615906f3f9be2ce", "0xce309393aa36b7ef", "0x6243ddb51a337304", "0xe0495ce514ee4267", - "0xf479942a15b82d19", "0x3484f32ff6dcf936", "0x3d485cd36298b5da", "0xcdb8c5017040e9ed", "0xed23ab1ee79266d1", "0x1a56ee16d69ad2a3", "0x0646e3397a174f83", "0x98ea781f02a5071a", - "0x8c77f5c840d7762f", "0x4720419c079f4b89", "0xa9b0e2c3c07d9885", "0x612ecd1ff4ecd3c5", "0x254f3b36ad521004", "0x46d1f55d10cac72d", "0xd7a5ba62b5d9315d", "0xeac91757fb066b5f", - "0x84f6904c2da56898", "0x06efd77b90561e3c", "0x9e152e00cd51627b", "0x708c82cc2f545ca5", "0x7fb90cbb65b09681", "0x1a170cf306c6b81c", "0x3d5fa555658bc6bf", "0xb1dbc3e905378746" + "0xb3a9a56cd6262839", "0x9647a7f847f7b325", "0x564b5523fff06340", "0xc6b94f272c812a6f", "0x00ba391677bde6f7", "0x48b1e3d9ec8e190a", "0x9323412d568f9ad3", "0x7df41522e473a8a6", + "0xaac4056991cc3405", "0x71e7a72beb505030", "0xa35319b04b4e4ebc", "0xf349e07c1aa5d583", "0xf4c43b4c2cd64f87", "0x4e9f50752f13fecc", "0xfa0efdaa136b1e4e", "0xf9ee1ad7daca0341", + "0xd7e56db6f446d928", "0x80adf5c0a46f57bd", "0xfe5d70ff9519f0ae", "0x3a05fd971f2d2b84", "0x63fd27f5a142a2e7", "0xa4e7026d85ef279b", "0x19f39e118a13a03c", "0xc1492288692aa3c2", + "0x53167ff9a20ff7f2", "0xcbb8c81293e3dd73", "0x48c86a037d9d2df9", "0x64a4bd23551fb76e", "0x793b72a3533c1df5", "0x7813144720ffde55", "0x76e43fadd4811e1c", "0xb25190d644354880" ]}, {"base_nonce": 4096, "expected": [ - "0x3be623a0f075d1f3", "0x2552e70de3533e93", "0x4c58e7fac79e754d", "0x4c6ce1acd35693f6", "0x9c356bcd5f1d4639", "0x29361be2e3fa88ef", "0x8a1878dfba4b4637", "0x9289b157d1a01a8c", - "0x70a4b5646d471b8e", "0xcf1595ab96209aa0", "0xe83503a00680799a", "0x7c1179b26025fcb4", "0x5a7aa05cd428f182", "0x02466e4a89473e34", "0xbd379fafb5889dee", "0x914679b7d4a92ece", - "0x71b1611d70b03bd4", "0x9b6ec7ca5afd24db", "0x955f2305b288ef17", "0x456aeb62e25e0a8c", "0x40724ed4d6c72cc7", "0xf520227cecca4067", "0x92146b6c5d82408f", "0xbacdfeaa3693bba5", - "0xb50a632febcaff29", "0x60bfffcb8b540752", "0x3eb9dbc42fc7b9d9", "0x73fd73c129763cd9", "0x701a9ec7130c5833", "0x02845e3260dbb636", "0x3b15ad42edfd3e74", "0x531d777ef600ee58" + "0x35813a1d007cc4fc", "0xbf6038d6d7c608c2", "0xc700ed43d0c221a6", "0x8201f42c036a6973", "0xf3a5ed87522d4457", "0xd37336f086cea31b", "0xbd07db8b671cba07", "0x88d71b593dbb4d79", + "0xb5dd7efa2dc38724", "0xd7ceac05ede80cb1", "0xa2be5e0eeb558be3", "0x4b223a2da3b1cbfa", "0xe80a880e8c423b58", "0xf72e6726f6dd2ced", "0x4f4a249ec493e01a", "0xc3f3e9d9ed2557b6", + "0x7a1975bb4a421973", "0x6b530daddda86c5e", "0xcc9c310997045fd4", "0xc7883cd20e1175a5", "0xc57e2ccc938321b6", "0x95e590fbb7745b98", "0x73841df2638f1939", "0x9424cb4cd3912794", + "0xa55f44b470857c26", "0xe4cb5e800792abeb", "0xed0d57d573ca2667", "0x73fba711d826246f", "0x3a84b0f691909d4c", "0x776c3141730962a3", "0xd0d78d5ddb93529c", "0x2fffc4d89eab7b0e" ]}, {"base_nonce": 1000000, "expected": [ - "0xde8458bcb18fb637", "0x0206b58b1f067ff0", "0xe107cdd0e87d28ae", "0x49fef7f22bc586d4", "0xff64163d017070cc", "0x968adfe921ccec1b", "0xe9560f8a3fa830da", "0x5d6f239c97224957", - "0xcc2f980c31f7c7e5", "0x4d7cd09c7b731241", "0x5b1841dcfa517b45", "0xabd19c355dd4723f", "0x316eaf5ba7e30331", "0xec8156a374468b8d", "0x0e3505a1ec9fe2a1", "0x5f1f5a94a69a1178", - "0xd4e6f7fda43c5056", "0x5ce560511eddb335", "0x88180b5ce94621cf", "0xb1095ce2dc071b55", "0xded0110936b4cf80", "0x43d2bbff72e231bc", "0xdd2bae28dbc4a9fe", "0x1c5055680fc7bca6", - "0x1917e8e4e79db0ad", "0xb4f64af4d8f8a7c2", "0xd6df5b0607279b60", "0x3da81ec2899f8314", "0x384c998c46ab8b80", "0x7c8ada8b7ca44cd5", "0x1346a6394b7e4e05", "0x4e9868001eb79a14" + "0x17881d377595f04e", "0xc871723058cb5d50", "0x4abf11697cb006ab", "0xaec0866dd6e5ad07", "0x841be78533292829", "0xad66114389a58451", "0xe2334630db45f4c8", "0xf1070ddd26c0026f", + "0xb579139914ec135c", "0xbe47563f4c0a7866", "0xc4546a5054a3083b", "0xcff83f4ce6ff9935", "0x4d5b18143981fd4e", "0x64ae78e02c05c6d4", "0x6c5b9b35a7910710", "0xedf6034405a57dae", + "0x90dc45a093cfdb4a", "0x8191ad8ee229568e", "0xc6d768fd41832f4a", "0xa27592dde1e532af", "0x051f489cf807aee0", "0xdcfcbc9fc6de509e", "0x3a9e85b4bb2c9e9b", "0xd00110ad255f826d", + "0x4e8ce146e485efd4", "0x31833f529fc93b2f", "0x866f00944db10630", "0xed23b5114f69e28c", "0x4dc9486df35eabd2", "0x8ea710f6445aceca", "0xf475659cf080d0ab", "0x995c17d2590c8c3c" ]} ], "dataset_head": ["0x19c6837f", "0xdf3adfb8", "0xbd3f6aed", "0xb8bede0d", "0xc5f0629f", "0x03e38ae8", "0xc435a60e", "0xfadee916", "0x827e59af", "0x8cf592f5", "0x60286061", "0x5d9abc1c", "0xa85d0c39", "0x4247a100", "0xd41a5b0d", "0x3f33dc64"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cl index 4393f4742..a1dc954a1 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cu index 262ddb4ce..f0b5e49e2 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-1/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cl index 6eb871a96..e7038aa2c 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cu index fb11f746d..2d4ca92e1 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-1/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/program.h b/proto-cuda/packs-ca3-v4/v4-era-1/program.h index 9e205a43b..905c2642f 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-1/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "ff87ad96a1b53f367a95d5ca123bab64211bd9aa57fc7ad3c5e2d496c20138d4" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0xb2a9d70du #define IGNEUM_ERA_STRIDE_ROT 6 #define IGNEUM_ERA_INTERLEAVE { 1, 3, 8, 13 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/program.json b/proto-cuda/packs-ca3-v4/v4-era-1/program.json index 8c26983fd..4fbdfb5cf 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-1/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "ff87ad96a1b53f367a95d5ca123bab64211bd9aa57fc7ad3c5e2d496c20138d4", "load_class": "mx8-era676a17fc+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/program.metal b/proto-cuda/packs-ca3-v4/v4-era-1/program.metal index 0ff6abf37..3076995c8 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-1/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-1/program_bound.metal index e315d069f..b72dc39f2 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-1/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0xb2a9d70du, 6u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0xb2a9d70du, 6u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0xb2a9d70du, 6u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-1/vectors.h index 5a0861fe4..66509bf6b 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-1/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xbd25be585e9f483aull, 0x42415dc1008bc167ull, 0x808b481a2ba0ee31ull, 0x9482f0d11a102aacull, 0xc8782e4fbd38f71dull, 0xbef02f6193c78dfeull, 0xf790061d0baf0ee2ull, 0x8df707bfebbb5266ull, - 0xd47ebe3648c32aa3ull, 0x8e337e0d74000f5full, 0xa2c1dfcf9bfd9b2bull, 0xbdc82bdf98d937e5ull, 0x6d8c6d41b0556cf1ull, 0x170c6a842bd29f8cull, 0x7cbb60763f8211e9ull, 0x091ae60c8df77ff1ull, - 0x85a309968b859efaull, 0xf917cf6f7e727926ull, 0xfa93a9f444db6381ull, 0x7ce089b8173f1af8ull, 0xdd4a1af297ec79f9ull, 0x3a1b907f25b76559ull, 0x5961a512eae86334ull, 0xf424423457ea3765ull, - 0x29c91de1b47e5cc1ull, 0x42dbeea9049ee394ull, 0xf1e5b7db42c969fcull, 0x05bd552362270025ull, 0xcc9d52e46c34e222ull, 0xea7a8dd12d9b5215ull, 0xb3767e4e3995df68ull, 0xe8ef919d038d88c5ull + 0x6d0d13f33130a9c2ull, 0x19d85963287f40beull, 0xf923f2c8c6fdd431ull, 0x65b30356009b29ddull, 0xb8050303b3b87fffull, 0x9409d0c9834ad96bull, 0x0ce7b5248f887343ull, 0x11da65fd8d1cba14ull, + 0x95f80aa1925d6bedull, 0x4af36c21279d8eaaull, 0x733f506887416358ull, 0xffb9b48eabda6c14ull, 0x0e312ff91b7e2ee5ull, 0x692fb750bdfafdd4ull, 0x0b94c06a99ade0a2ull, 0x838dfd7e4fad03c9ull, + 0xcf633a2599d6bff1ull, 0x0d88ec47e46bab4aull, 0x247ae87b45e1a3f3ull, 0x33850bf248a09442ull, 0x8e713f3860453b6eull, 0xbc72591fdd48a84dull, 0x26973c1dd2b62f26ull, 0x0237c53bebb667ddull, + 0x07b5d654af48289cull, 0x92b5bb645688e739ull, 0xadcaf3c3c96d75b6ull, 0x183f0f05f4657172ull, 0xe34a3539a865a0a5ull, 0x9cf7928a07a94d91ull, 0xf64241706404d725ull, 0x024410955d6f13fdull }, { // base nonce 4096 - 0x3f56bb1287c456ceull, 0x82ea484e42cdc735ull, 0xf23918f44eb4b16bull, 0x35fa0e1461907922ull, 0x8f5ce24039e15677ull, 0xacd1c99175c3d7ecull, 0xd178a7b614ed8146ull, 0x47f918cfd5054696ull, - 0xc563739e8a6f80edull, 0x9e60aeeb9ca06c4eull, 0x857d4b51b3d98e10ull, 0xfaf2d0a4f79095ebull, 0x0b71b8fc789ac2ecull, 0x43a232348714b127ull, 0x285acfdac594da71ull, 0x3a7b88c3ce2b8072ull, - 0xa42762355d7a0a94ull, 0x12a5093c741ccfabull, 0x1c9132a046e1ca9full, 0xe88f10a778a1aabeull, 0xb54049c213699dc2ull, 0x3bb616b0bffda6b0ull, 0x2d2f0a25b94ecb3eull, 0x38c41e74a75e5921ull, - 0x631515adfa1edd4full, 0x80a01b3952ea1c95ull, 0x00afd63a2d4afcc2ull, 0x00fa1532253d3ea2ull, 0x76a824e91f58ad63ull, 0x15f3aa3ce283008bull, 0x8c4593b01e90cf5bull, 0x9b772227f63f5c1dull + 0xa349b923150cce34ull, 0xfe374af7464a6e22ull, 0x7e89332c37b8db17ull, 0x2731bae965d9ede8ull, 0x2968762bc404bd32ull, 0xd637b12938b4aa6eull, 0xa9c5f96d4bc3ec28ull, 0x031a65bd9ecfd009ull, + 0xa90a407631c53a1dull, 0xf48734de2bde55b1ull, 0x9b833ad8f2ceb3c3ull, 0x83f1d8c7637dba1aull, 0x7dd2fbafe5838a70ull, 0x195dec2c7a1abdcdull, 0x06021aa87f9a6199ull, 0xd75c84d95a9561fdull, + 0x0b19dbc35c1665ceull, 0x9d5697afada2e764ull, 0x5ee4ce1f9d582f4cull, 0xb8090a24a9c9b7e5ull, 0x4be263a5e6f36507ull, 0xadba852a874ba45aull, 0x11f40a3debcd25aaull, 0xcd644eb2d6399a13ull, + 0x51d517c234ffe80bull, 0x676a7423448682e7ull, 0xd1e28b62fdd19d8dull, 0x269e3684fc97e7d8ull, 0x432173ccec0c4c56ull, 0x27386bcaaa569e02ull, 0x23e5f4c343737bcdull, 0x1324feb52ab1ef54ull }, { // base nonce 1000000 - 0xffc8d9c97d88e620ull, 0x1d7ee1acd496f181ull, 0xdff243b4a319c51aull, 0x1fd170c09f160fe3ull, 0xf67e0b69767852b0ull, 0x472912b4be99cdcdull, 0x5fad91fd832b3b61ull, 0xa5c9c1359d6aa74eull, - 0x6954523bb04ee9afull, 0xb048141f79726eb7ull, 0xe0c3182a16efb402ull, 0x39a09b038893b946ull, 0x2755e09f37d5efe2ull, 0x1e3338adcbbbaa5eull, 0x9036ec64d8816dbeull, 0xb6f6ffa4a73b774eull, - 0x514532b888255135ull, 0xc201f3dad4148ea0ull, 0x48cbcb6a4c9ba357ull, 0xf199b90384342df7ull, 0x9657e131356782d8ull, 0x5aa6f64a15b174f9ull, 0x6442f6fc30cd2f6cull, 0xdbd16862aff1b9b5ull, - 0xf62576ff01a1e6d6ull, 0xc3f654831ee4d08full, 0xbbe065fb2695bdffull, 0x1b9851d988309c48ull, 0x8474d21940bcc812ull, 0xa90030c199ad1c6bull, 0xb0752b8985cb7723ull, 0x2e5049d028c84c43ull + 0xc72739c720cccff8ull, 0xc636c3fb73bfa2e2ull, 0x9c7d3b3f5e1344a5ull, 0x661676da94059438ull, 0x059b7cce292934eaull, 0xabd6b4b55dc88ab6ull, 0x6371d0e025f2c310ull, 0xbb5684f9863dd482ull, + 0x80945ef982d33c9dull, 0x33334b3042065708ull, 0x0cb33376f0fbebbfull, 0x676452be1aa688d4ull, 0x8a58806a10dc211dull, 0x9bd5a9d76b632222ull, 0x206d94200e01a190ull, 0x2d390d8923d1a871ull, + 0x1c8d9f8bc4fb860dull, 0x76254d06ec107efaull, 0x20f205689169a9d3ull, 0x8177412e65746d6full, 0x5c5c2ccd269f9c84ull, 0x81eda0d83ba4352dull, 0x2e5c776402343acaull, 0xb9a3aba804cf316bull, + 0x52c4467f914982b8ull, 0x29b510ec94341afeull, 0x4b8fe210069b0cfaull, 0x41a3da23d35f70e0ull, 0x084be680d9164cd2ull, 0x65c88b0cbefaa81bull, 0xc07c4d709177ca1aull, 0xd89acba46d478885ull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-1/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-1/vectors.json index d3d40ed6a..20eabcdfb 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-1/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-1/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xbd25be585e9f483a", "0x42415dc1008bc167", "0x808b481a2ba0ee31", "0x9482f0d11a102aac", "0xc8782e4fbd38f71d", "0xbef02f6193c78dfe", "0xf790061d0baf0ee2", "0x8df707bfebbb5266", - "0xd47ebe3648c32aa3", "0x8e337e0d74000f5f", "0xa2c1dfcf9bfd9b2b", "0xbdc82bdf98d937e5", "0x6d8c6d41b0556cf1", "0x170c6a842bd29f8c", "0x7cbb60763f8211e9", "0x091ae60c8df77ff1", - "0x85a309968b859efa", "0xf917cf6f7e727926", "0xfa93a9f444db6381", "0x7ce089b8173f1af8", "0xdd4a1af297ec79f9", "0x3a1b907f25b76559", "0x5961a512eae86334", "0xf424423457ea3765", - "0x29c91de1b47e5cc1", "0x42dbeea9049ee394", "0xf1e5b7db42c969fc", "0x05bd552362270025", "0xcc9d52e46c34e222", "0xea7a8dd12d9b5215", "0xb3767e4e3995df68", "0xe8ef919d038d88c5" + "0x6d0d13f33130a9c2", "0x19d85963287f40be", "0xf923f2c8c6fdd431", "0x65b30356009b29dd", "0xb8050303b3b87fff", "0x9409d0c9834ad96b", "0x0ce7b5248f887343", "0x11da65fd8d1cba14", + "0x95f80aa1925d6bed", "0x4af36c21279d8eaa", "0x733f506887416358", "0xffb9b48eabda6c14", "0x0e312ff91b7e2ee5", "0x692fb750bdfafdd4", "0x0b94c06a99ade0a2", "0x838dfd7e4fad03c9", + "0xcf633a2599d6bff1", "0x0d88ec47e46bab4a", "0x247ae87b45e1a3f3", "0x33850bf248a09442", "0x8e713f3860453b6e", "0xbc72591fdd48a84d", "0x26973c1dd2b62f26", "0x0237c53bebb667dd", + "0x07b5d654af48289c", "0x92b5bb645688e739", "0xadcaf3c3c96d75b6", "0x183f0f05f4657172", "0xe34a3539a865a0a5", "0x9cf7928a07a94d91", "0xf64241706404d725", "0x024410955d6f13fd" ]}, {"base_nonce": 4096, "expected": [ - "0x3f56bb1287c456ce", "0x82ea484e42cdc735", "0xf23918f44eb4b16b", "0x35fa0e1461907922", "0x8f5ce24039e15677", "0xacd1c99175c3d7ec", "0xd178a7b614ed8146", "0x47f918cfd5054696", - "0xc563739e8a6f80ed", "0x9e60aeeb9ca06c4e", "0x857d4b51b3d98e10", "0xfaf2d0a4f79095eb", "0x0b71b8fc789ac2ec", "0x43a232348714b127", "0x285acfdac594da71", "0x3a7b88c3ce2b8072", - "0xa42762355d7a0a94", "0x12a5093c741ccfab", "0x1c9132a046e1ca9f", "0xe88f10a778a1aabe", "0xb54049c213699dc2", "0x3bb616b0bffda6b0", "0x2d2f0a25b94ecb3e", "0x38c41e74a75e5921", - "0x631515adfa1edd4f", "0x80a01b3952ea1c95", "0x00afd63a2d4afcc2", "0x00fa1532253d3ea2", "0x76a824e91f58ad63", "0x15f3aa3ce283008b", "0x8c4593b01e90cf5b", "0x9b772227f63f5c1d" + "0xa349b923150cce34", "0xfe374af7464a6e22", "0x7e89332c37b8db17", "0x2731bae965d9ede8", "0x2968762bc404bd32", "0xd637b12938b4aa6e", "0xa9c5f96d4bc3ec28", "0x031a65bd9ecfd009", + "0xa90a407631c53a1d", "0xf48734de2bde55b1", "0x9b833ad8f2ceb3c3", "0x83f1d8c7637dba1a", "0x7dd2fbafe5838a70", "0x195dec2c7a1abdcd", "0x06021aa87f9a6199", "0xd75c84d95a9561fd", + "0x0b19dbc35c1665ce", "0x9d5697afada2e764", "0x5ee4ce1f9d582f4c", "0xb8090a24a9c9b7e5", "0x4be263a5e6f36507", "0xadba852a874ba45a", "0x11f40a3debcd25aa", "0xcd644eb2d6399a13", + "0x51d517c234ffe80b", "0x676a7423448682e7", "0xd1e28b62fdd19d8d", "0x269e3684fc97e7d8", "0x432173ccec0c4c56", "0x27386bcaaa569e02", "0x23e5f4c343737bcd", "0x1324feb52ab1ef54" ]}, {"base_nonce": 1000000, "expected": [ - "0xffc8d9c97d88e620", "0x1d7ee1acd496f181", "0xdff243b4a319c51a", "0x1fd170c09f160fe3", "0xf67e0b69767852b0", "0x472912b4be99cdcd", "0x5fad91fd832b3b61", "0xa5c9c1359d6aa74e", - "0x6954523bb04ee9af", "0xb048141f79726eb7", "0xe0c3182a16efb402", "0x39a09b038893b946", "0x2755e09f37d5efe2", "0x1e3338adcbbbaa5e", "0x9036ec64d8816dbe", "0xb6f6ffa4a73b774e", - "0x514532b888255135", "0xc201f3dad4148ea0", "0x48cbcb6a4c9ba357", "0xf199b90384342df7", "0x9657e131356782d8", "0x5aa6f64a15b174f9", "0x6442f6fc30cd2f6c", "0xdbd16862aff1b9b5", - "0xf62576ff01a1e6d6", "0xc3f654831ee4d08f", "0xbbe065fb2695bdff", "0x1b9851d988309c48", "0x8474d21940bcc812", "0xa90030c199ad1c6b", "0xb0752b8985cb7723", "0x2e5049d028c84c43" + "0xc72739c720cccff8", "0xc636c3fb73bfa2e2", "0x9c7d3b3f5e1344a5", "0x661676da94059438", "0x059b7cce292934ea", "0xabd6b4b55dc88ab6", "0x6371d0e025f2c310", "0xbb5684f9863dd482", + "0x80945ef982d33c9d", "0x33334b3042065708", "0x0cb33376f0fbebbf", "0x676452be1aa688d4", "0x8a58806a10dc211d", "0x9bd5a9d76b632222", "0x206d94200e01a190", "0x2d390d8923d1a871", + "0x1c8d9f8bc4fb860d", "0x76254d06ec107efa", "0x20f205689169a9d3", "0x8177412e65746d6f", "0x5c5c2ccd269f9c84", "0x81eda0d83ba4352d", "0x2e5c776402343aca", "0xb9a3aba804cf316b", + "0x52c4467f914982b8", "0x29b510ec94341afe", "0x4b8fe210069b0cfa", "0x41a3da23d35f70e0", "0x084be680d9164cd2", "0x65c88b0cbefaa81b", "0xc07c4d709177ca1a", "0xd89acba46d478885" ]} ], "dataset_head": ["0x19c6837f", "0xbd3f6aed", "0xdf3adfb8", "0xb8bede0d", "0x827e59af", "0x60286061", "0x8cf592f5", "0x5d9abc1c", "0xc5f0629f", "0xc435a60e", "0x03e38ae8", "0xfadee916", "0xa85d0c39", "0xd41a5b0d", "0x4247a100", "0x3f33dc64"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cl index 6f8d2196e..7f2cdd62b 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cu index 519c701df..151241fe3 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-2/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cl index 94eab846c..06d5a7101 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cu index 0c0e9413f..9c8bb441a 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-2/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/program.h b/proto-cuda/packs-ca3-v4/v4-era-2/program.h index 8a962d87e..cce449944 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-2/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "df57136f2ad5f410e6145023090eea148c1342ccef5a5f541afa590be7e44745" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x2b4a5b97u #define IGNEUM_ERA_STRIDE_ROT 28 #define IGNEUM_ERA_INTERLEAVE { 1, 3, 4, 8 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/program.json b/proto-cuda/packs-ca3-v4/v4-era-2/program.json index 554430aa9..a0ee358c4 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-2/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "df57136f2ad5f410e6145023090eea148c1342ccef5a5f541afa590be7e44745", "load_class": "mx8-era843155d7+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/program.metal b/proto-cuda/packs-ca3-v4/v4-era-2/program.metal index c3d2819c4..7a755f02b 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-2/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-2/program_bound.metal index 2d3430e65..5106c21bf 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-2/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x2b4a5b97u, 28u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x2b4a5b97u, 28u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x2b4a5b97u, 28u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-2/vectors.h index 78a83a960..4bd67c31d 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-2/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xd15f7638ecab0638ull, 0xf71dc04ca33f9049ull, 0xdda27e825b83045full, 0x0babd54b6eb42cb6ull, 0x22b4cafe1d3a82d7ull, 0x1ded091e583999c8ull, 0x9445769b44b82cbdull, 0xbd850d3ec7937586ull, - 0xd503809c85e89628ull, 0xe1c06157f7c30353ull, 0xd60623d3d7eea552ull, 0x7d893fab4009c4d4ull, 0xa153fbc5e57b66a5ull, 0xd60055d442ad5f10ull, 0xd68537a9835ef4d5ull, 0xf904817a6a8188d3ull, - 0x024eef8355667005ull, 0x498b0d273a1f70d3ull, 0x04719bd1c8633f5bull, 0x153f8f65912540caull, 0x5d19c2cb32a9be86ull, 0x68a1791304d4c616ull, 0x65cee64ecdd50cf8ull, 0xd14b2d91df1e6c36ull, - 0x0a9f67bd86a20bcaull, 0x99068e67d3d9da10ull, 0x84c845b2f4a99b52ull, 0xb2d622100c4cb3c9ull, 0x312854dbc455f269ull, 0x6bfd7d56844bd049ull, 0x654be06144c8aaabull, 0xb97c033d13ff45b9ull + 0xfdf35828bf38af2full, 0x84034a93bc7c2b8bull, 0x8bbc331f3d02a362ull, 0x56ad56b48fc2826eull, 0x6bcfe9c2b7a0f2a7ull, 0xe80349aba26374b3ull, 0x7554c05e94857ae1ull, 0xfd6b806bbe13ba99ull, + 0x86734b3c9c31bcb9ull, 0xe0c23bd6f58f1848ull, 0xb85fe29f58a2bc1dull, 0xf9e184c1a459093bull, 0xe6231dd4900ada2dull, 0xf8f096cb4d1ca71dull, 0x1017212ef357f0f2ull, 0xcfe454dc62f424dbull, + 0x0b918cd35d29b278ull, 0x8cb94d20fc5e3bc4ull, 0xeba1c8be957e43f8ull, 0xd8204ee1267e8fd4ull, 0xce37a685a1bce92cull, 0x5a92b97519c774a9ull, 0x20a2615497dbc8f7ull, 0xe4e455d2e83ca124ull, + 0x24937e269b5f8270ull, 0x2ddc5fba2260e246ull, 0x6370a650a1e63ea9ull, 0x5a99d77c7ad304f0ull, 0x7fb7a8ecdf04fe99ull, 0x08722dd720e40069ull, 0xaf0b938f66f29157ull, 0xed83390e9923edcfull }, { // base nonce 4096 - 0xca511aa94bb7de28ull, 0xf50562fbd930d7cbull, 0x90d1d21d286f4526ull, 0xf7dd004498042c76ull, 0x4015a3dedf539b30ull, 0xbf188aa13bf0d0b0ull, 0x3562a5190ceb5c0eull, 0x6d8fc479c085e14bull, - 0x0c028bae78f97b7aull, 0x83438623fdef4ab5ull, 0x12d046bb02e00e62ull, 0x70ec066026f7e35aull, 0x593aa049f2d1a94aull, 0x8ca00d8f621627adull, 0x6e1ca47c67a11a4aull, 0x44b0e6fba37093ceull, - 0x26557f61f6b46af6ull, 0xa8fb8acbd4f447f9ull, 0x8b5d5d8fea192771ull, 0x05319f2d2a379723ull, 0xea48c6831e5c4e09ull, 0x77dc8af07fbffad6ull, 0xf73f12c67ee72439ull, 0xbd6ca871de1f5a15ull, - 0xfa023ce22a449fcdull, 0x4d10b2e249f230c7ull, 0x8eb20cbc44bb4cd3ull, 0x0f6a25ef75994a9cull, 0xf3e2b830c7268634ull, 0xbb9b9d9cb45a3ba7ull, 0xe1a7cfda15d5d859ull, 0x469597ce101451dcull + 0x83ee085a7ee89443ull, 0xf0da5711de8af0bbull, 0xffbf8d4946e7dd6eull, 0x0da7c4bf3ff9f8e2ull, 0x62c1aa1ff310b5c1ull, 0xa5a3a8012010ccdaull, 0xceaf84b0ba2fe3cdull, 0xe5a3b8e2858798f6ull, + 0x2699a1ecc39a51c1ull, 0xe3579f4372a699bfull, 0x1a92f1d6f073f3f7ull, 0x457afcda759526f5ull, 0x37e4fedcd6659668ull, 0x0ed702977d3e1343ull, 0xa02610bb2509d93bull, 0xdabd7606aa4fab93ull, + 0x47ec9cbc512de908ull, 0xef57c7de6ff997b1ull, 0x9e31e31384b19824ull, 0x20af911c4f7faa3aull, 0x9577ccd74224cf81ull, 0xa34b46917f27d9a3ull, 0xf0fe13766f771a73ull, 0xc132417380e287dcull, + 0xb8ba69c2b911657dull, 0xd6a867fc7cc9375bull, 0x2c357a660e70fe6eull, 0x0e0100ff0a51f445ull, 0x85d874c251f8ae20ull, 0x97c25725a0f1bbd6ull, 0xe12bef4d417aa5f7ull, 0xb351ee6a927bb5ccull }, { // base nonce 1000000 - 0x1b69d837d0e478f9ull, 0x7f4ea76a066e3abfull, 0x877d6e73bc9d55eeull, 0x2ce7115def57d121ull, 0xbaa9996f8db3a59full, 0xaf8f831594ef4cfbull, 0x7e15598c87bd4319ull, 0x5dbf2e8fe7d65335ull, - 0x69de5134b0e4260eull, 0x48f3865c27bdf852ull, 0xe470c56ea8799783ull, 0x3d99bbf38de6d92full, 0x16355adc8947980full, 0xeaf478e9b3c281e9ull, 0x64ad42cd95af5cb0ull, 0x8f3042a5ae75653full, - 0x5bd477dc9ace031bull, 0xe49671e0b12b9c88ull, 0xc2af87b389841379ull, 0x5f24587ff2b07510ull, 0xec5862ebad445432ull, 0x53a1995450693ed4ull, 0x62dacf7f2f8020cdull, 0x30cb5459c52a6779ull, - 0x616ba82cf713a033ull, 0x2ab4f3fc72d72c9eull, 0xd095040ca4fd494dull, 0x9cbf315db4bee964ull, 0xb3288c63109bd0d5ull, 0x7a8122aca003c5c5ull, 0x5e7054016621ab58ull, 0x116981c856dd2a2dull + 0x8d264dd1f53bc0a8ull, 0x598b9ede58af6bdeull, 0x8d302ebda9cc611cull, 0x3b84dc81fe142831ull, 0xdfd4a17b7c0a769full, 0x9310faac99c3290dull, 0x0a29fbbdb1d6a9e0ull, 0xc2e56e8377adde26ull, + 0x1292dbddd3e9d890ull, 0x938f59295de57468ull, 0xa9c980f474336105ull, 0xb2eea047d6e91a5full, 0x62e13f1ba6960945ull, 0xd2f713a75b550fbfull, 0xf23e8d2371916615ull, 0x1865fa8d92879255ull, + 0xfe62adcc6430cacaull, 0x4d37002af2f275f0ull, 0x2bf1e6f35e373634ull, 0xd43778a84b161445ull, 0xd1c3678edcb0a82bull, 0x391b9d6a57440de8ull, 0x7491232f92fad9b0ull, 0x6ef5639edce04d93ull, + 0x4108bad8895f9e9eull, 0x42e3b15d463b4b2aull, 0x5a7a9e1b02386173ull, 0xd4b19b080c8a633cull, 0xaa63b95de3dddf71ull, 0xbd0462d7ff0c7a71ull, 0x987cf7a4c77a2f06ull, 0x9e7adf0e32932ca1ull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-2/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-2/vectors.json index 731647a9d..3a5a2277d 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-2/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-2/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xd15f7638ecab0638", "0xf71dc04ca33f9049", "0xdda27e825b83045f", "0x0babd54b6eb42cb6", "0x22b4cafe1d3a82d7", "0x1ded091e583999c8", "0x9445769b44b82cbd", "0xbd850d3ec7937586", - "0xd503809c85e89628", "0xe1c06157f7c30353", "0xd60623d3d7eea552", "0x7d893fab4009c4d4", "0xa153fbc5e57b66a5", "0xd60055d442ad5f10", "0xd68537a9835ef4d5", "0xf904817a6a8188d3", - "0x024eef8355667005", "0x498b0d273a1f70d3", "0x04719bd1c8633f5b", "0x153f8f65912540ca", "0x5d19c2cb32a9be86", "0x68a1791304d4c616", "0x65cee64ecdd50cf8", "0xd14b2d91df1e6c36", - "0x0a9f67bd86a20bca", "0x99068e67d3d9da10", "0x84c845b2f4a99b52", "0xb2d622100c4cb3c9", "0x312854dbc455f269", "0x6bfd7d56844bd049", "0x654be06144c8aaab", "0xb97c033d13ff45b9" + "0xfdf35828bf38af2f", "0x84034a93bc7c2b8b", "0x8bbc331f3d02a362", "0x56ad56b48fc2826e", "0x6bcfe9c2b7a0f2a7", "0xe80349aba26374b3", "0x7554c05e94857ae1", "0xfd6b806bbe13ba99", + "0x86734b3c9c31bcb9", "0xe0c23bd6f58f1848", "0xb85fe29f58a2bc1d", "0xf9e184c1a459093b", "0xe6231dd4900ada2d", "0xf8f096cb4d1ca71d", "0x1017212ef357f0f2", "0xcfe454dc62f424db", + "0x0b918cd35d29b278", "0x8cb94d20fc5e3bc4", "0xeba1c8be957e43f8", "0xd8204ee1267e8fd4", "0xce37a685a1bce92c", "0x5a92b97519c774a9", "0x20a2615497dbc8f7", "0xe4e455d2e83ca124", + "0x24937e269b5f8270", "0x2ddc5fba2260e246", "0x6370a650a1e63ea9", "0x5a99d77c7ad304f0", "0x7fb7a8ecdf04fe99", "0x08722dd720e40069", "0xaf0b938f66f29157", "0xed83390e9923edcf" ]}, {"base_nonce": 4096, "expected": [ - "0xca511aa94bb7de28", "0xf50562fbd930d7cb", "0x90d1d21d286f4526", "0xf7dd004498042c76", "0x4015a3dedf539b30", "0xbf188aa13bf0d0b0", "0x3562a5190ceb5c0e", "0x6d8fc479c085e14b", - "0x0c028bae78f97b7a", "0x83438623fdef4ab5", "0x12d046bb02e00e62", "0x70ec066026f7e35a", "0x593aa049f2d1a94a", "0x8ca00d8f621627ad", "0x6e1ca47c67a11a4a", "0x44b0e6fba37093ce", - "0x26557f61f6b46af6", "0xa8fb8acbd4f447f9", "0x8b5d5d8fea192771", "0x05319f2d2a379723", "0xea48c6831e5c4e09", "0x77dc8af07fbffad6", "0xf73f12c67ee72439", "0xbd6ca871de1f5a15", - "0xfa023ce22a449fcd", "0x4d10b2e249f230c7", "0x8eb20cbc44bb4cd3", "0x0f6a25ef75994a9c", "0xf3e2b830c7268634", "0xbb9b9d9cb45a3ba7", "0xe1a7cfda15d5d859", "0x469597ce101451dc" + "0x83ee085a7ee89443", "0xf0da5711de8af0bb", "0xffbf8d4946e7dd6e", "0x0da7c4bf3ff9f8e2", "0x62c1aa1ff310b5c1", "0xa5a3a8012010ccda", "0xceaf84b0ba2fe3cd", "0xe5a3b8e2858798f6", + "0x2699a1ecc39a51c1", "0xe3579f4372a699bf", "0x1a92f1d6f073f3f7", "0x457afcda759526f5", "0x37e4fedcd6659668", "0x0ed702977d3e1343", "0xa02610bb2509d93b", "0xdabd7606aa4fab93", + "0x47ec9cbc512de908", "0xef57c7de6ff997b1", "0x9e31e31384b19824", "0x20af911c4f7faa3a", "0x9577ccd74224cf81", "0xa34b46917f27d9a3", "0xf0fe13766f771a73", "0xc132417380e287dc", + "0xb8ba69c2b911657d", "0xd6a867fc7cc9375b", "0x2c357a660e70fe6e", "0x0e0100ff0a51f445", "0x85d874c251f8ae20", "0x97c25725a0f1bbd6", "0xe12bef4d417aa5f7", "0xb351ee6a927bb5cc" ]}, {"base_nonce": 1000000, "expected": [ - "0x1b69d837d0e478f9", "0x7f4ea76a066e3abf", "0x877d6e73bc9d55ee", "0x2ce7115def57d121", "0xbaa9996f8db3a59f", "0xaf8f831594ef4cfb", "0x7e15598c87bd4319", "0x5dbf2e8fe7d65335", - "0x69de5134b0e4260e", "0x48f3865c27bdf852", "0xe470c56ea8799783", "0x3d99bbf38de6d92f", "0x16355adc8947980f", "0xeaf478e9b3c281e9", "0x64ad42cd95af5cb0", "0x8f3042a5ae75653f", - "0x5bd477dc9ace031b", "0xe49671e0b12b9c88", "0xc2af87b389841379", "0x5f24587ff2b07510", "0xec5862ebad445432", "0x53a1995450693ed4", "0x62dacf7f2f8020cd", "0x30cb5459c52a6779", - "0x616ba82cf713a033", "0x2ab4f3fc72d72c9e", "0xd095040ca4fd494d", "0x9cbf315db4bee964", "0xb3288c63109bd0d5", "0x7a8122aca003c5c5", "0x5e7054016621ab58", "0x116981c856dd2a2d" + "0x8d264dd1f53bc0a8", "0x598b9ede58af6bde", "0x8d302ebda9cc611c", "0x3b84dc81fe142831", "0xdfd4a17b7c0a769f", "0x9310faac99c3290d", "0x0a29fbbdb1d6a9e0", "0xc2e56e8377adde26", + "0x1292dbddd3e9d890", "0x938f59295de57468", "0xa9c980f474336105", "0xb2eea047d6e91a5f", "0x62e13f1ba6960945", "0xd2f713a75b550fbf", "0xf23e8d2371916615", "0x1865fa8d92879255", + "0xfe62adcc6430caca", "0x4d37002af2f275f0", "0x2bf1e6f35e373634", "0xd43778a84b161445", "0xd1c3678edcb0a82b", "0x391b9d6a57440de8", "0x7491232f92fad9b0", "0x6ef5639edce04d93", + "0x4108bad8895f9e9e", "0x42e3b15d463b4b2a", "0x5a7a9e1b02386173", "0xd4b19b080c8a633c", "0xaa63b95de3dddf71", "0xbd0462d7ff0c7a71", "0x987cf7a4c77a2f06", "0x9e7adf0e32932ca1" ]} ], "dataset_head": ["0x19c6837f", "0xbd3f6aed", "0xdf3adfb8", "0xb8bede0d", "0x827e59af", "0x60286061", "0x8cf592f5", "0x5d9abc1c", "0xc5f0629f", "0xc435a60e", "0x03e38ae8", "0xfadee916", "0xa85d0c39", "0xd41a5b0d", "0x4247a100", "0x3f33dc64"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cl index f85e305c6..6b653d28d 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cu index 55fc0a08f..241786ae6 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-3/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cl index 126a54ca8..a8498e19a 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cu index cc5b36119..c3f2b0b82 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-3/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/program.h b/proto-cuda/packs-ca3-v4/v4-era-3/program.h index 8481a9f52..f7789cf48 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-3/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "e593fc1d48475c88e456632f6aa0a752a5fdbca3c33022afe37680e44b7dfd11" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x27ea7effu #define IGNEUM_ERA_STRIDE_ROT 30 #define IGNEUM_ERA_INTERLEAVE { 2, 3, 8, 13 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/program.json b/proto-cuda/packs-ca3-v4/v4-era-3/program.json index 09cc22767..1742f600c 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-3/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "e593fc1d48475c88e456632f6aa0a752a5fdbca3c33022afe37680e44b7dfd11", "load_class": "mx8-erad6367bfe+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/program.metal b/proto-cuda/packs-ca3-v4/v4-era-3/program.metal index 5b1ef6401..08392ad00 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-3/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-3/program_bound.metal index 0e3bcc4e6..9bfd2a2af 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-3/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x27ea7effu, 30u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x27ea7effu, 30u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x27ea7effu, 30u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-3/vectors.h index a2557ab32..b2687b9a5 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-3/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x40b750d1c8a8070full, 0x0eabee774c28ab59ull, 0xcc13c43e53c39432ull, 0x6a9c15036cd8ea3eull, 0x33632873969d8edeull, 0x598d17a33791fdc9ull, 0x2eff1230b4254f1eull, 0xe94dd51fbd984bceull, - 0xb99fbeb7ee79e111ull, 0xf96bf58191e27007ull, 0x0d0eeb157f2fb140ull, 0xc63153f0272b9855ull, 0x73805af5544b3db0ull, 0x79c1b5a74c8560e9ull, 0x0ea9cca3277890e5ull, 0x1d176fab1cd2973aull, - 0x119ab8f645bf8a2dull, 0xf1c9b6889298e177ull, 0x46f901ebdb35452aull, 0x383a4d749d1ad0e8ull, 0xf4353dc68a21fac5ull, 0xa6c45db77d51deb9ull, 0x82603eb8e3a8df60ull, 0xf8245dd6e5b8de09ull, - 0x3c5ad35824c49228ull, 0xc2ea030a6104da05ull, 0x6059173f71a28844ull, 0x42356c03e7c14337ull, 0xe707beb14ff8afa9ull, 0x0d572180b81363b2ull, 0xbd4479364aaac437ull, 0x3e6fd0864a730c42ull + 0x934168fcc6a7f38dull, 0xf2497a4f0979d96bull, 0x667122dc026e7defull, 0xba457a7aec530815ull, 0xe2415969c790dca7ull, 0xcd35e02524e2a55eull, 0x020a689f4474d3a0ull, 0x6aa3b86cf015699dull, + 0x4244ec17f9f27fe7ull, 0x9e79ab3953f2b4c5ull, 0x92463614b23ada93ull, 0x8a0c1844bd046423ull, 0xc3307dfd948c8a8full, 0x2c13b74642f4ad5dull, 0xfb035f6aeedfe480ull, 0xe612c9f11a28a1a8ull, + 0xff9cff39157ff89bull, 0x5a54907336b42a7bull, 0xc00d22a6ec83faceull, 0xbcd523922a18e009ull, 0x8257021372a00369ull, 0x5af833659a0a620dull, 0xd3d9cdcc75159fb6ull, 0x3f948fe1c057f5ffull, + 0x8dbac4b11956efa9ull, 0x02eae3679bded2c5ull, 0x6d4d56a2e467b395ull, 0x967a52c0791d940eull, 0x638bf2fa1c6349e2ull, 0x06f7b04aa795e552ull, 0xb1a54967db89e1a9ull, 0x38e66030915a6295ull }, { // base nonce 4096 - 0x0db15f7c616f2d25ull, 0x17b04f540b4846d6ull, 0xcddd5a8ee8a5efe0ull, 0x0cf0cf62d997c83eull, 0xbd5b7795b4dbd26cull, 0x2d7b8aa0a985480full, 0x10d7689b878233c2ull, 0xbeed4790abb65517ull, - 0x22c14a4e0a10eeaeull, 0xcdfa941f2e7960f9ull, 0x879bf9554455ec49ull, 0x5cec926ae13470fdull, 0xad086583b0bccd24ull, 0xa76fa9afc7d6d9f8ull, 0x4dc4e1184adb00c8ull, 0x5410c5c88a875d85ull, - 0x6ba2aed6fc622330ull, 0x4664d893aac13b54ull, 0x94bca09b542c77b6ull, 0x7ac3a74d54d15c2eull, 0x8fd7503272ef64b9ull, 0xd9ffc122880e7432ull, 0xd232c638aba55395ull, 0xf25659961199829cull, - 0xe87691a335d4d5b4ull, 0xc24e26d570d76954ull, 0xc2bf85ff359b2121ull, 0xa4195d2eec65f9c8ull, 0x260b4f6b0a9b6138ull, 0x6b7082ed96379d93ull, 0x7a4d1e4f9cd0276bull, 0x90afe3c042fed6e2ull + 0xb0f2ff5704556859ull, 0x6c6cba11e059e0e2ull, 0xae24e16f954eaf82ull, 0x6ab3d7f4a7da083full, 0xcbb672b589efdeebull, 0x9b6f276f8d384aa9ull, 0x8d31fc26ebe6b3cbull, 0x62c52eae2f66ec28ull, + 0x68a996c3099ee3b1ull, 0x86125b22906b3bceull, 0xe34b06c1af7551a5ull, 0x5b40a4495b20619dull, 0x1d84ce90f05f2727ull, 0xdfed7d625ee30ff8ull, 0x2f103e6e9a8a6419ull, 0x4dd6c4feb1fcc91aull, + 0xb8a4e6a9f27ff8feull, 0x7b29c57c20ff78f5ull, 0xaa25aff7440d0d98ull, 0x9adce3c313d1e84full, 0x63dce2906fe586d6ull, 0x9eae99ddce0797aaull, 0x508d6fe88f833694ull, 0x095c08757d6258edull, + 0x4a75e3b52be40d55ull, 0x05ee4268bc91ec56ull, 0x7a633ad337a9da17ull, 0x21bf4b3cc4d4e07cull, 0x62fd3eba4f7180d4ull, 0xffc62aeb3c533f6bull, 0x2314e56d54d11e07ull, 0x7605b086476cf2fcull }, { // base nonce 1000000 - 0x06897e48ecfdf30dull, 0xc2407e8c2e0a6df7ull, 0xfc7b70f2531fc0efull, 0x747fb0709c82c21bull, 0x2c1b6c10825e53edull, 0x4fc0e3d09485cbc3ull, 0x36a8e3d8a83dcb87ull, 0xa9b04c51829184f8ull, - 0x16c05be25080fcbeull, 0x488eec7576d2a293ull, 0xab03139ccbf27fa0ull, 0x85246c99a37d87d0ull, 0x09b2c5ae915b6eafull, 0x8e0a34f2ec25ba0cull, 0xa5313b7d8a58e010ull, 0x8cb897eb47b626a6ull, - 0x3c06e7453858ef65ull, 0xcee4fc69243cbf1bull, 0xfe2f0b3329d6ef34ull, 0x3a19eccb6a374b0aull, 0xa8848523eb449ec3ull, 0xc84ea452644c79caull, 0x23f77955e2b1c1d8ull, 0x1ec75c6675ca3245ull, - 0xbe1c597e1dc237a3ull, 0x524841798abd82bcull, 0x21c1b17d075c9356ull, 0xbeea164bb5aed2faull, 0x7e8db3ca049cde0eull, 0x1a6f526d31708af9ull, 0x06096e878273cab7ull, 0x707399fc4e364b01ull + 0x9c07f5dc47a75591ull, 0xb69de15d8ecdeaedull, 0x0b671c5d20921c3eull, 0x5e2168ba2b6f83baull, 0xb86c2f4f8c5e89a2ull, 0xa7705716e6ea8038ull, 0x061621f74a197575ull, 0xb67840deb42204a3ull, + 0xb05ee1dd4cff9b82ull, 0x9833843c23b414f6ull, 0x67dd35f01e68f87dull, 0x5c4f02c27ea546e9ull, 0x1225d6f23d8f2a3bull, 0x545f7b3fe8d39fcdull, 0x6ed2bd3163174bb1ull, 0x98183a2b92fedda9ull, + 0x17898a13df0b0f3full, 0xea59f25c9fec5ca1ull, 0x1d65d385245744c9ull, 0x6969966938da6cb6ull, 0x2f09a5ac6e257ce2ull, 0x9cd03743d1525eeaull, 0x6ebe439dca4b3275ull, 0xad9734fac196179eull, + 0xa41bda11b90a76f0ull, 0xcee1fb45949a8e5aull, 0x4e1831e67fc20708ull, 0x4282e8b2982ce43eull, 0xe306e373faaa68c8ull, 0x05f88efad6049bc1ull, 0x3281bea7aa1d72ddull, 0x94d1374c46c51b53ull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-3/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-3/vectors.json index 7ef3fb872..4ba7f4144 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-3/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-3/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x40b750d1c8a8070f", "0x0eabee774c28ab59", "0xcc13c43e53c39432", "0x6a9c15036cd8ea3e", "0x33632873969d8ede", "0x598d17a33791fdc9", "0x2eff1230b4254f1e", "0xe94dd51fbd984bce", - "0xb99fbeb7ee79e111", "0xf96bf58191e27007", "0x0d0eeb157f2fb140", "0xc63153f0272b9855", "0x73805af5544b3db0", "0x79c1b5a74c8560e9", "0x0ea9cca3277890e5", "0x1d176fab1cd2973a", - "0x119ab8f645bf8a2d", "0xf1c9b6889298e177", "0x46f901ebdb35452a", "0x383a4d749d1ad0e8", "0xf4353dc68a21fac5", "0xa6c45db77d51deb9", "0x82603eb8e3a8df60", "0xf8245dd6e5b8de09", - "0x3c5ad35824c49228", "0xc2ea030a6104da05", "0x6059173f71a28844", "0x42356c03e7c14337", "0xe707beb14ff8afa9", "0x0d572180b81363b2", "0xbd4479364aaac437", "0x3e6fd0864a730c42" + "0x934168fcc6a7f38d", "0xf2497a4f0979d96b", "0x667122dc026e7def", "0xba457a7aec530815", "0xe2415969c790dca7", "0xcd35e02524e2a55e", "0x020a689f4474d3a0", "0x6aa3b86cf015699d", + "0x4244ec17f9f27fe7", "0x9e79ab3953f2b4c5", "0x92463614b23ada93", "0x8a0c1844bd046423", "0xc3307dfd948c8a8f", "0x2c13b74642f4ad5d", "0xfb035f6aeedfe480", "0xe612c9f11a28a1a8", + "0xff9cff39157ff89b", "0x5a54907336b42a7b", "0xc00d22a6ec83face", "0xbcd523922a18e009", "0x8257021372a00369", "0x5af833659a0a620d", "0xd3d9cdcc75159fb6", "0x3f948fe1c057f5ff", + "0x8dbac4b11956efa9", "0x02eae3679bded2c5", "0x6d4d56a2e467b395", "0x967a52c0791d940e", "0x638bf2fa1c6349e2", "0x06f7b04aa795e552", "0xb1a54967db89e1a9", "0x38e66030915a6295" ]}, {"base_nonce": 4096, "expected": [ - "0x0db15f7c616f2d25", "0x17b04f540b4846d6", "0xcddd5a8ee8a5efe0", "0x0cf0cf62d997c83e", "0xbd5b7795b4dbd26c", "0x2d7b8aa0a985480f", "0x10d7689b878233c2", "0xbeed4790abb65517", - "0x22c14a4e0a10eeae", "0xcdfa941f2e7960f9", "0x879bf9554455ec49", "0x5cec926ae13470fd", "0xad086583b0bccd24", "0xa76fa9afc7d6d9f8", "0x4dc4e1184adb00c8", "0x5410c5c88a875d85", - "0x6ba2aed6fc622330", "0x4664d893aac13b54", "0x94bca09b542c77b6", "0x7ac3a74d54d15c2e", "0x8fd7503272ef64b9", "0xd9ffc122880e7432", "0xd232c638aba55395", "0xf25659961199829c", - "0xe87691a335d4d5b4", "0xc24e26d570d76954", "0xc2bf85ff359b2121", "0xa4195d2eec65f9c8", "0x260b4f6b0a9b6138", "0x6b7082ed96379d93", "0x7a4d1e4f9cd0276b", "0x90afe3c042fed6e2" + "0xb0f2ff5704556859", "0x6c6cba11e059e0e2", "0xae24e16f954eaf82", "0x6ab3d7f4a7da083f", "0xcbb672b589efdeeb", "0x9b6f276f8d384aa9", "0x8d31fc26ebe6b3cb", "0x62c52eae2f66ec28", + "0x68a996c3099ee3b1", "0x86125b22906b3bce", "0xe34b06c1af7551a5", "0x5b40a4495b20619d", "0x1d84ce90f05f2727", "0xdfed7d625ee30ff8", "0x2f103e6e9a8a6419", "0x4dd6c4feb1fcc91a", + "0xb8a4e6a9f27ff8fe", "0x7b29c57c20ff78f5", "0xaa25aff7440d0d98", "0x9adce3c313d1e84f", "0x63dce2906fe586d6", "0x9eae99ddce0797aa", "0x508d6fe88f833694", "0x095c08757d6258ed", + "0x4a75e3b52be40d55", "0x05ee4268bc91ec56", "0x7a633ad337a9da17", "0x21bf4b3cc4d4e07c", "0x62fd3eba4f7180d4", "0xffc62aeb3c533f6b", "0x2314e56d54d11e07", "0x7605b086476cf2fc" ]}, {"base_nonce": 1000000, "expected": [ - "0x06897e48ecfdf30d", "0xc2407e8c2e0a6df7", "0xfc7b70f2531fc0ef", "0x747fb0709c82c21b", "0x2c1b6c10825e53ed", "0x4fc0e3d09485cbc3", "0x36a8e3d8a83dcb87", "0xa9b04c51829184f8", - "0x16c05be25080fcbe", "0x488eec7576d2a293", "0xab03139ccbf27fa0", "0x85246c99a37d87d0", "0x09b2c5ae915b6eaf", "0x8e0a34f2ec25ba0c", "0xa5313b7d8a58e010", "0x8cb897eb47b626a6", - "0x3c06e7453858ef65", "0xcee4fc69243cbf1b", "0xfe2f0b3329d6ef34", "0x3a19eccb6a374b0a", "0xa8848523eb449ec3", "0xc84ea452644c79ca", "0x23f77955e2b1c1d8", "0x1ec75c6675ca3245", - "0xbe1c597e1dc237a3", "0x524841798abd82bc", "0x21c1b17d075c9356", "0xbeea164bb5aed2fa", "0x7e8db3ca049cde0e", "0x1a6f526d31708af9", "0x06096e878273cab7", "0x707399fc4e364b01" + "0x9c07f5dc47a75591", "0xb69de15d8ecdeaed", "0x0b671c5d20921c3e", "0x5e2168ba2b6f83ba", "0xb86c2f4f8c5e89a2", "0xa7705716e6ea8038", "0x061621f74a197575", "0xb67840deb42204a3", + "0xb05ee1dd4cff9b82", "0x9833843c23b414f6", "0x67dd35f01e68f87d", "0x5c4f02c27ea546e9", "0x1225d6f23d8f2a3b", "0x545f7b3fe8d39fcd", "0x6ed2bd3163174bb1", "0x98183a2b92fedda9", + "0x17898a13df0b0f3f", "0xea59f25c9fec5ca1", "0x1d65d385245744c9", "0x6969966938da6cb6", "0x2f09a5ac6e257ce2", "0x9cd03743d1525eea", "0x6ebe439dca4b3275", "0xad9734fac196179e", + "0xa41bda11b90a76f0", "0xcee1fb45949a8e5a", "0x4e1831e67fc20708", "0x4282e8b2982ce43e", "0xe306e373faaa68c8", "0x05f88efad6049bc1", "0x3281bea7aa1d72dd", "0x94d1374c46c51b53" ]} ], "dataset_head": ["0x19c6837f", "0xbd3f6aed", "0x827e59af", "0x60286061", "0xdf3adfb8", "0xb8bede0d", "0x8cf592f5", "0x5d9abc1c", "0xc5f0629f", "0xc435a60e", "0xa85d0c39", "0xd41a5b0d", "0x03e38ae8", "0xfadee916", "0x4247a100", "0x3f33dc64"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cl index 70619d9d6..864f534db 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cu index 53f6f0107..91e41dcb6 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-4/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cl index 210e25170..d5f9e94fc 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cu index 0cbfd453e..c01db8e59 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-4/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/program.h b/proto-cuda/packs-ca3-v4/v4-era-4/program.h index 0d279daaa..549333f89 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-4/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "5e0587f455a86e91e4990f5c481a34cca0044d3f3ae519adcae58ddc82885d31" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x4d38603du #define IGNEUM_ERA_STRIDE_ROT 10 #define IGNEUM_ERA_INTERLEAVE { 2, 9, 13, 15 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/program.json b/proto-cuda/packs-ca3-v4/v4-era-4/program.json index b3eec7bbf..8dff7f2a3 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-4/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "5e0587f455a86e91e4990f5c481a34cca0044d3f3ae519adcae58ddc82885d31", "load_class": "mx8-era4488f3ed+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/program.metal b/proto-cuda/packs-ca3-v4/v4-era-4/program.metal index 2a354e058..5a81cba94 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-4/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-4/program_bound.metal index 8bb8dafcd..61c7ccbb6 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-4/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x4d38603du, 10u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x4d38603du, 10u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x4d38603du, 10u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-4/vectors.h index f11d1b8cd..de55da4c6 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-4/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0x32d75a818461b0feull, 0xfb58b5a9a0749f1aull, 0x7f1ef1c14a39acb7ull, 0x241bbf0d64ef82daull, 0xa91a888a98e1a327ull, 0x85236aa911aee1ccull, 0x2b621fc52bd4de06ull, 0xccb36c7b29b9f7eeull, - 0x81d5f71dddc9d99eull, 0x77e66510f1716ed8ull, 0x1dfc423f41cc325eull, 0xe4b7dc733eca22b9ull, 0x252e914ee1a1b811ull, 0xd60b7bb383400268ull, 0x68c45f316313a46eull, 0xb44e1d40659b5c0full, - 0x3317b1e961fa97caull, 0x048195572a542bd0ull, 0xbfc8c57f13ac1c9cull, 0x90b11f960392b615ull, 0x833c4d8bf2b4e7a3ull, 0x85e8a998130d39adull, 0x46989748ffc3f693ull, 0xbd9b68036b5db585ull, - 0x2a7b248a138b7764ull, 0xa808e45213e9e428ull, 0x1cd401d2d14d73caull, 0xf380476406eaa703ull, 0x61c78feb89981977ull, 0xf9f0d9a7a6a3bff5ull, 0x8e862238e6607e1bull, 0x81bb469c84523c38ull + 0x9882ff74f40fd713ull, 0x262fbf7789f813d7ull, 0x2d6540eb4ecae938ull, 0x1044875f3a71a4f9ull, 0x1742fd6d480e50dfull, 0xcecebae525f2bdd5ull, 0xd80d0719f745238dull, 0x2dce7ce873961004ull, + 0x3f5f5b90c5d829f5ull, 0xe3ac9f61b7efde8aull, 0x190f222cf9c004b9ull, 0xda6162a4e1cb7078ull, 0xb7c34219a983600eull, 0xca654bea4a49c116ull, 0x49148b619e7ab60bull, 0x9b607248eb378a52ull, + 0x8cbc4c2bdf4d7e3aull, 0x1e14127d34b09cb5ull, 0x88f021c95fb8d7e9ull, 0x5b130b8164644cdfull, 0x1287c3452669120cull, 0x416f6cb2b7a46e98ull, 0x737b656f87cd4dbeull, 0x1a8a1631f0508c21ull, + 0xbc50f0a30ef92039ull, 0x5f912b417ec7377eull, 0x53c1949f7d919000ull, 0x556f1ba36dffc822ull, 0x53ac89faf3df8175ull, 0xea5614e9a2a45c3bull, 0x58eb4c822dfd9b6aull, 0x60ef6cfc33893363ull }, { // base nonce 4096 - 0x16a13c6b8953521full, 0xb6fc3248eab8ad1bull, 0xd7636da2cadffb33ull, 0x0e4b29dbfbc26c03ull, 0xdc3628881ff4d880ull, 0xd7b5b538a83fa397ull, 0xd628f6e4c1faea5cull, 0x1b7271fe675ac8d2ull, - 0xc2e58dc8651838edull, 0xeceb83b391908d90ull, 0x4d2ced55dd770a57ull, 0x8476f19f2dced0beull, 0x7943efb7511ec325ull, 0x39517e839ac5cad6ull, 0xa93a24a60552fef4ull, 0xd06f827bfad0666full, - 0x8ad225381fec0d20ull, 0xc533e53132f29515ull, 0xccf64b20e5996785ull, 0xca92afef337bf781ull, 0x0346c9056575b868ull, 0xbd579e3afcad5227ull, 0xebbb7866335220acull, 0xae3cdc60a6b6614aull, - 0xbb0d1a802ba23492ull, 0x694ff6fa089a8a70ull, 0xb56b49abd8dae21dull, 0x8c1fac2bf309ccecull, 0x79b9689a4b61c18cull, 0x3cb6c19bfbcce52eull, 0xe908bb28f2574c34ull, 0x35080bd5bf213879ull + 0xab9e219e7ddb35b7ull, 0x365d153f8d7f58abull, 0x56d87607639a8fd0ull, 0x8a53622cb1615d87ull, 0xdf98ef09820d3b04ull, 0x5f351dc7a2724619ull, 0xcc9b1d0ca54f08b4ull, 0xedc18242c6b8a950ull, + 0x01fb095cc903fce5ull, 0x8713b8d109f9b747ull, 0xd9b74c93df851435ull, 0x488749a5905fbb1dull, 0x427abee1bc673829ull, 0xafacb358f189921full, 0x7287c99c8126c463ull, 0x964bc5f8f29064f3ull, + 0x1c889bf131dbb15full, 0x4c47cc828452e5c6ull, 0xc33a7038bf706697ull, 0x38109ceea06bc163ull, 0xdd09c9965d0e0bf8ull, 0xdb8697aec43751e3ull, 0x84156497686d9e25ull, 0x4722e0be78e31141ull, + 0xa3cbc6827439ef83ull, 0x41ec07f136aebf82ull, 0x25390b6dea061aebull, 0xc89b2b45e800d8eaull, 0x8c1736f1c0ac9069ull, 0x0125bc755eb88facull, 0x1376860c608c32f9ull, 0xcc99b5862680fd94ull }, { // base nonce 1000000 - 0x41302c423e89263bull, 0x5152c4fdb644c7ebull, 0xa9886ee87da41e91ull, 0x52a1e6209b2119baull, 0xce336b33dc0eea27ull, 0x59b61d9b32a49598ull, 0x9fcabf472fe74364ull, 0x5d0d09ce86a6ddbaull, - 0x884e7ebff4a1a28bull, 0xa39081f4965aac7dull, 0xdae88580d7337c0eull, 0xba0f4c8b0d79c15cull, 0x66392f1948e70a94ull, 0xa7f0aeab677fb0aaull, 0x0efa4e6ea43702e4ull, 0xc2944100f48711f1ull, - 0xe22bf44299adaf79ull, 0x1a6c099e2b3836caull, 0x7595a2366be1b0dfull, 0xa0dc4af86aec0108ull, 0xa0b96e19fea7aed8ull, 0x52ca60aeb1c3dfc6ull, 0xde7a719d2d766daaull, 0x477f9497ccbf9388ull, - 0x8ce858b1f1d19a94ull, 0xdeab496a568e6df5ull, 0x6eb8896aff7fc737ull, 0xa3ef1cbbc0084fb9ull, 0x8609281ee7caf702ull, 0x6a403ada59e40b68ull, 0x7ee1a0b4bafe9a8aull, 0x6a6017a19d0e6879ull + 0x94454f2d180f9f4full, 0xbb824190332d5726ull, 0x0d17f90637f60048ull, 0x41bcbca88d437608ull, 0x4c8938d0124b5a03ull, 0xe57653cb9f129c7bull, 0x236cfb567de1162dull, 0x38486cc8a0837a00ull, + 0xfeae7138f23b1ffdull, 0xf0cccaacbb4c0d4dull, 0x4ec07ec8b044d4cbull, 0xa4ff716aed3550b9ull, 0xa4145cd241f68d27ull, 0x2b6e595d8e5aae51ull, 0xa69e8d80b7d41540ull, 0x6714cd9012e350d7ull, + 0xe2d11401cfb68de8ull, 0x77557479a98a4dfeull, 0xaa8fdf813248b71cull, 0x46d00743cc17c9e0ull, 0x13b34ad0b3845401ull, 0x2da06479cc370441ull, 0x15485d6296a08db0ull, 0xbd73d7288f64b0e1ull, + 0xbba8ebcdfda30783ull, 0xdcb064935bba15e6ull, 0x89196f440273d6f3ull, 0x1ef704a3592d9968ull, 0x27107f523252add4ull, 0x28842c55f5796723ull, 0x59276f5c439122acull, 0xdce762e619b1372aull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-4/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-4/vectors.json index cc5539d3f..2ce810be6 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-4/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-4/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0x32d75a818461b0fe", "0xfb58b5a9a0749f1a", "0x7f1ef1c14a39acb7", "0x241bbf0d64ef82da", "0xa91a888a98e1a327", "0x85236aa911aee1cc", "0x2b621fc52bd4de06", "0xccb36c7b29b9f7ee", - "0x81d5f71dddc9d99e", "0x77e66510f1716ed8", "0x1dfc423f41cc325e", "0xe4b7dc733eca22b9", "0x252e914ee1a1b811", "0xd60b7bb383400268", "0x68c45f316313a46e", "0xb44e1d40659b5c0f", - "0x3317b1e961fa97ca", "0x048195572a542bd0", "0xbfc8c57f13ac1c9c", "0x90b11f960392b615", "0x833c4d8bf2b4e7a3", "0x85e8a998130d39ad", "0x46989748ffc3f693", "0xbd9b68036b5db585", - "0x2a7b248a138b7764", "0xa808e45213e9e428", "0x1cd401d2d14d73ca", "0xf380476406eaa703", "0x61c78feb89981977", "0xf9f0d9a7a6a3bff5", "0x8e862238e6607e1b", "0x81bb469c84523c38" + "0x9882ff74f40fd713", "0x262fbf7789f813d7", "0x2d6540eb4ecae938", "0x1044875f3a71a4f9", "0x1742fd6d480e50df", "0xcecebae525f2bdd5", "0xd80d0719f745238d", "0x2dce7ce873961004", + "0x3f5f5b90c5d829f5", "0xe3ac9f61b7efde8a", "0x190f222cf9c004b9", "0xda6162a4e1cb7078", "0xb7c34219a983600e", "0xca654bea4a49c116", "0x49148b619e7ab60b", "0x9b607248eb378a52", + "0x8cbc4c2bdf4d7e3a", "0x1e14127d34b09cb5", "0x88f021c95fb8d7e9", "0x5b130b8164644cdf", "0x1287c3452669120c", "0x416f6cb2b7a46e98", "0x737b656f87cd4dbe", "0x1a8a1631f0508c21", + "0xbc50f0a30ef92039", "0x5f912b417ec7377e", "0x53c1949f7d919000", "0x556f1ba36dffc822", "0x53ac89faf3df8175", "0xea5614e9a2a45c3b", "0x58eb4c822dfd9b6a", "0x60ef6cfc33893363" ]}, {"base_nonce": 4096, "expected": [ - "0x16a13c6b8953521f", "0xb6fc3248eab8ad1b", "0xd7636da2cadffb33", "0x0e4b29dbfbc26c03", "0xdc3628881ff4d880", "0xd7b5b538a83fa397", "0xd628f6e4c1faea5c", "0x1b7271fe675ac8d2", - "0xc2e58dc8651838ed", "0xeceb83b391908d90", "0x4d2ced55dd770a57", "0x8476f19f2dced0be", "0x7943efb7511ec325", "0x39517e839ac5cad6", "0xa93a24a60552fef4", "0xd06f827bfad0666f", - "0x8ad225381fec0d20", "0xc533e53132f29515", "0xccf64b20e5996785", "0xca92afef337bf781", "0x0346c9056575b868", "0xbd579e3afcad5227", "0xebbb7866335220ac", "0xae3cdc60a6b6614a", - "0xbb0d1a802ba23492", "0x694ff6fa089a8a70", "0xb56b49abd8dae21d", "0x8c1fac2bf309ccec", "0x79b9689a4b61c18c", "0x3cb6c19bfbcce52e", "0xe908bb28f2574c34", "0x35080bd5bf213879" + "0xab9e219e7ddb35b7", "0x365d153f8d7f58ab", "0x56d87607639a8fd0", "0x8a53622cb1615d87", "0xdf98ef09820d3b04", "0x5f351dc7a2724619", "0xcc9b1d0ca54f08b4", "0xedc18242c6b8a950", + "0x01fb095cc903fce5", "0x8713b8d109f9b747", "0xd9b74c93df851435", "0x488749a5905fbb1d", "0x427abee1bc673829", "0xafacb358f189921f", "0x7287c99c8126c463", "0x964bc5f8f29064f3", + "0x1c889bf131dbb15f", "0x4c47cc828452e5c6", "0xc33a7038bf706697", "0x38109ceea06bc163", "0xdd09c9965d0e0bf8", "0xdb8697aec43751e3", "0x84156497686d9e25", "0x4722e0be78e31141", + "0xa3cbc6827439ef83", "0x41ec07f136aebf82", "0x25390b6dea061aeb", "0xc89b2b45e800d8ea", "0x8c1736f1c0ac9069", "0x0125bc755eb88fac", "0x1376860c608c32f9", "0xcc99b5862680fd94" ]}, {"base_nonce": 1000000, "expected": [ - "0x41302c423e89263b", "0x5152c4fdb644c7eb", "0xa9886ee87da41e91", "0x52a1e6209b2119ba", "0xce336b33dc0eea27", "0x59b61d9b32a49598", "0x9fcabf472fe74364", "0x5d0d09ce86a6ddba", - "0x884e7ebff4a1a28b", "0xa39081f4965aac7d", "0xdae88580d7337c0e", "0xba0f4c8b0d79c15c", "0x66392f1948e70a94", "0xa7f0aeab677fb0aa", "0x0efa4e6ea43702e4", "0xc2944100f48711f1", - "0xe22bf44299adaf79", "0x1a6c099e2b3836ca", "0x7595a2366be1b0df", "0xa0dc4af86aec0108", "0xa0b96e19fea7aed8", "0x52ca60aeb1c3dfc6", "0xde7a719d2d766daa", "0x477f9497ccbf9388", - "0x8ce858b1f1d19a94", "0xdeab496a568e6df5", "0x6eb8896aff7fc737", "0xa3ef1cbbc0084fb9", "0x8609281ee7caf702", "0x6a403ada59e40b68", "0x7ee1a0b4bafe9a8a", "0x6a6017a19d0e6879" + "0x94454f2d180f9f4f", "0xbb824190332d5726", "0x0d17f90637f60048", "0x41bcbca88d437608", "0x4c8938d0124b5a03", "0xe57653cb9f129c7b", "0x236cfb567de1162d", "0x38486cc8a0837a00", + "0xfeae7138f23b1ffd", "0xf0cccaacbb4c0d4d", "0x4ec07ec8b044d4cb", "0xa4ff716aed3550b9", "0xa4145cd241f68d27", "0x2b6e595d8e5aae51", "0xa69e8d80b7d41540", "0x6714cd9012e350d7", + "0xe2d11401cfb68de8", "0x77557479a98a4dfe", "0xaa8fdf813248b71c", "0x46d00743cc17c9e0", "0x13b34ad0b3845401", "0x2da06479cc370441", "0x15485d6296a08db0", "0xbd73d7288f64b0e1", + "0xbba8ebcdfda30783", "0xdcb064935bba15e6", "0x89196f440273d6f3", "0x1ef704a3592d9968", "0x27107f523252add4", "0x28842c55f5796723", "0x59276f5c439122ac", "0xdce762e619b1372a" ]} ], "dataset_head": ["0x19c6837f", "0xbd3f6aed", "0x827e59af", "0x60286061", "0xdf3adfb8", "0xb8bede0d", "0x8cf592f5", "0x5d9abc1c", "0x680c3063", "0x64552beb", "0x43376a1c", "0x84d86df8", "0x15623a58", "0x50d157a7", "0x9d970ef9", "0x02b7d1e4"], diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cl b/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cl index 41b4e47d0..40a46b030 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cu b/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cu index 319729458..c7405f2ae 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-5/kernel.cu @@ -47,339 +47,339 @@ __global__ void igneum_hash(const uint32_t* ds, uint64_t* out, uint32_t baseNonc uint32_t gid = blockIdx.x * blockDim.x + threadIdx.x; uint32_t nonce = baseNonce + gid; uint32_t r0, r1, r2, r3, r4, r5, r6, r7; - { uint32_t x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint32_t x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint32_t x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint32_t x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint32_t x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint32_t x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint32_t x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint32_t x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint32_t x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint32_t x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint32_t x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint32_t x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint32_t x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint32_t x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint32_t x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint32_t x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cl b/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cl index 324e97444..d28829254 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cl +++ b/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cl @@ -191,339 +191,339 @@ IGNEUM_KERNEL_HASH void igneum_hash(__global const uint* ds, __global ulong* out #else (void)lid; #endif - { uint x = nonce ^ 0x667d0fbdu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0x7b8e5963u; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] - { uint x = nonce ^ 0x7b8e5963u; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x31c67e5eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] - { uint x = nonce ^ 0x31c67e5eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0x4529ddc6u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] - { uint x = nonce ^ 0x4529ddc6u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0xef19d6d8u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] - { uint x = nonce ^ 0xef19d6d8u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0xaccf6211u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] - { uint x = nonce ^ 0xaccf6211u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0xda0aed32u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] - { uint x = nonce ^ 0xda0aed32u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0xabc6df31u; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] - { uint x = nonce ^ 0xabc6df31u; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x667d0fbdu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] + { uint x = nonce ^ 0x29e76ddbu; x += 0x9e3779b9u; x = splitmix32(x); r0 = x ^ 0xdb25cf2au; } // SEEDW[0], 0x9e3779b9u * 1u, SEEDW[1] + { uint x = nonce ^ 0xdb25cf2au; x += 0x3c6ef372u; x = splitmix32(x); r1 = x ^ 0x596c281eu; } // SEEDW[1], 0x9e3779b9u * 2u, SEEDW[2] + { uint x = nonce ^ 0x596c281eu; x += 0xdaa66d2bu; x = splitmix32(x); r2 = x ^ 0xb8284534u; } // SEEDW[2], 0x9e3779b9u * 3u, SEEDW[3] + { uint x = nonce ^ 0xb8284534u; x += 0x78dde6e4u; x = splitmix32(x); r3 = x ^ 0x50556ce6u; } // SEEDW[3], 0x9e3779b9u * 4u, SEEDW[4] + { uint x = nonce ^ 0x50556ce6u; x += 0x1715609du; x = splitmix32(x); r4 = x ^ 0x336eb6d5u; } // SEEDW[4], 0x9e3779b9u * 5u, SEEDW[5] + { uint x = nonce ^ 0x336eb6d5u; x += 0xb54cda56u; x = splitmix32(x); r5 = x ^ 0x01933285u; } // SEEDW[5], 0x9e3779b9u * 6u, SEEDW[6] + { uint x = nonce ^ 0x01933285u; x += 0x5384540fu; x = splitmix32(x); r6 = x ^ 0x39690d9fu; } // SEEDW[6], 0x9e3779b9u * 7u, SEEDW[7] + { uint x = nonce ^ 0x39690d9fu; x += 0xf1bbcdc8u; x = splitmix32(x); r7 = x ^ 0x29e76ddbu; } // SEEDW[7], 0x9e3779b9u * 8u, SEEDW[0] for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); @@ -564,328 +564,328 @@ IGNEUM_KERNEL_HASH void igneum_hash_bound(__global const uint* ds, __global ulon for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r3 = r3 ^ t_; } // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // 14 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r3 = r3 ^ t_; } // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = mul_hi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = mul_hi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r0 = r0 ^ t_; } // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = mul_hi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 8u); r5 = r5 ^ t_; } // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = mul_hi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = mul_hi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 1u); r1 = r1 ^ t_; } // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = mul_hi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r2 = r2 ^ t_; } // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = mul_hi(r6, r1); // 47 mulhi + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r3 = r3 ^ t_; } // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r4 = r4 ^ t_; } // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = mul_hi(r5, r0); // s2 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r4 = r4 ^ t_; } // s3 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 1u); r4 = r4 ^ t_; } // s4 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 8u); r4 = r4 ^ t_; } // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mul_hi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r1 = r1 ^ t_; } // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mul_hi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s22 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r1 = r1 ^ t_; } // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mul_hi(r4, r2); // s27 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 2u); r1 = r1 ^ t_; } // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mul_hi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r3 = r3 ^ t_; } // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r0 = r0 ^ t_; } // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mul_hi(r0, r2); // s55 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r6 = r6 ^ t_; } // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r0 = r0 ^ t_; } // s75 shfl - r5 = r5 - r7; // s76 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 2u); r5 = r5 ^ t_; } // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r6 = r6 ^ t_; } // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s86 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 4u); r2 = r2 ^ t_; } // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = mul_hi(r0, r1); // s92 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r6 = r6 ^ t_; } // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 4u); r1 = r1 ^ t_; } // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mul_hi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mul_hi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = mul_hi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r1 = r1 ^ t_; } // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r4 = r4 ^ t_; } // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r3 = r3 ^ t_; } // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r5, 16u); r6 = r6 ^ t_; } // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r1 = r1 ^ t_; } // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r1 = r1 ^ t_; } // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mul_hi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r5 = r5 ^ t_; } // s167 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r2 = r2 ^ t_; } // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mul_hi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mul_hi(r1, r0); // s187 mulhi - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 16u); r4 = r4 ^ t_; } // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 16u); r6 = r6 ^ t_; } // s201 shfl - r4 = r4 * r2; // s202 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 1u); r3 = r3 ^ t_; } // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r7 = r7 ^ t_; } // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - { uint t_; IGNEUM_SHFL_XOR(t_, r2, 8u); r4 = r4 ^ t_; } // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 2u); r6 = r6 ^ t_; } // s216 shfl - r2 = mul_hi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - { uint t_; IGNEUM_SHFL_XOR(t_, r1, 8u); r2 = r2 ^ t_; } // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mul_hi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mul_hi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 16u); r5 = r5 ^ t_; } // s225 shfl - r3 = mul_hi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - { uint t_; IGNEUM_SHFL_XOR(t_, r7, 2u); r1 = r1 ^ t_; } // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = mul_hi(r7, r5); // s239 mulhi - r3 = mul_hi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - { uint t_; IGNEUM_SHFL_XOR(t_, r0, 2u); r4 = r4 ^ t_; } // s247 shfl - r3 = r3 ^ r2; // s248 xor - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r7 = r7 ^ t_; } // s249 shfl - { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r5 = r5 ^ t_; } // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mul_hi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r1 = r1 ^ t_; } // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r2 = r2 ^ t_; } // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 4u); r1 = r1 ^ t_; } // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mul_hi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mul_hi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mul_hi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mul_hi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r7 = r7 ^ t_; } // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = mul_hi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mul_hi(r1, r0); // s77 mulhi + r2 = mul_hi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 2u); r5 = r5 ^ t_; } // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 16u); r2 = r2 ^ t_; } // s84 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r3 = r3 ^ t_; } // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 8u); r4 = r4 ^ t_; } // s89 shfl + r4 = r4 ^ r1; // s90 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r1 = r1 ^ t_; } // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mul_hi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r5 = r5 ^ t_; } // s96 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 1u); r6 = r6 ^ t_; } // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 4u); r4 = r4 ^ t_; } // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mul_hi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + { uint t_; IGNEUM_SHFL_XOR(t_, r7, 1u); r1 = r1 ^ t_; } // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 16u); r1 = r1 ^ t_; } // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mul_hi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mul_hi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mul_hi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r6, 2u); r4 = r4 ^ t_; } // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mul_hi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mul_hi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mul_hi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r0, 8u); r5 = r5 ^ t_; } // s217 shfl + r3 = r3 | r6; // s218 or + { uint t_; IGNEUM_SHFL_XOR(t_, r2, 4u); r0 = r0 ^ t_; } // s219 shfl + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 1u); r0 = r0 ^ t_; } // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + { uint t_; IGNEUM_SHFL_XOR(t_, r3, 8u); r4 = r4 ^ t_; } // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + { uint t_; IGNEUM_SHFL_XOR(t_, r4, 4u); r3 = r3 ^ t_; } // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mul_hi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + { uint t_; IGNEUM_SHFL_XOR(t_, r5, 2u); r7 = r7 ^ t_; } // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cu b/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cu index b87b863a6..004c5a6e5 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cu +++ b/proto-cuda/packs-ca3-v4/v4-era-5/kernel_bound.cu @@ -35,328 +35,328 @@ __global__ void igneum_hash_bound(const uint32_t* ds, uint64_t* out, uint32_t ba for (uint32_t it = 0u; it < 8u; ++it) { uint32_t sel = r0; - r4 = r4 + r5 + ((((sel >> 13u) & 1u) != 0u) ? 0x5810667au : 0xea86e152u); // 0 add - r7 = r7 ^ r0; // 1 xor - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 2 shfl - r4 = r4 - r1; // 3 sub - r2 = r0 * r4 + r2; // 4 mad - r4 = rotl_imm(r4, 9u); // 5 rotl - r0 = rotr_var(r0, r2); // 6 rotr - r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 7 load - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 8 load - r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 9 load - r7 = r7 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load - r7 = r7 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 11 load - r5 = r5 * r4; // 12 mul - r7 = r7 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 13 load - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // 14 shfl - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // 15 shfl - r2 = r2 | r7; // 16 or - r0 = rotr_var(r0, r6); // 17 rotr - r7 = r7 + r5 + ((((sel >> 12u) & 1u) != 0u) ? 0xb9e3577eu : 0xf66e7017u); // 18 add - r7 = rotl_imm(r7, 24u); // 19 rotl - r6 = r6 + r7 + ((((sel >> 23u) & 1u) != 0u) ? 0x8c9f0ef8u : 0x52334d12u); // 20 add - r2 = r2 | r6; // 21 or - r6 = r5 * r4 + r6; // 22 mad - r1 = r1 | r0; // 23 or - r6 = r6 ^ r1; // 24 xor - r2 = r2 + r6 + ((((sel >> 17u) & 1u) != 0u) ? 0x9cec0e12u : 0x659fc3d3u); // 25 add - r7 = rotr_var(r7, r0); // 26 rotr - r4 = r5 * r7 + r4; // 27 mad - r3 = r2 * r4 + r3; // 28 mad - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 29 load - r2 = r2 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & mask]; // 30 load - r1 = r1 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 31 load - r7 = r7 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0xe403240eu : 0x070888a8u); // 32 add - r2 = r2 + r0 + ((((sel >> 28u) & 1u) != 0u) ? 0x29701828u : 0xf2e46d55u); // 33 add - r2 = r2 + r3 + ((((sel >> 14u) & 1u) != 0u) ? 0x343b7aeeu : 0x58f75b87u); // 34 add - r2 = __umulhi(r2, r5); // 35 mulhi - r4 = r4 ^ r2; // 36 xor - r6 = r6 * r5; // 37 mul - r7 = r7 ^ r0; // 38 xor - r7 = r7 + r2 + ((((sel >> 19u) & 1u) != 0u) ? 0x32bbd117u : 0xb8180e9du); // 39 add - r2 = rotr_var(r2, r3); // 40 rotr - r7 = r7 - r0; // 41 sub - r4 = r4 + r3 + ((((sel >> 4u) & 1u) != 0u) ? 0x6df7aed4u : 0x6ced15b7u); // 42 add - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // 43 shfl - r0 = r0 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 44 load - r1 = r1 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0x83e825bfu : 0xe09f54e9u); // 45 add - r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 46 load - r6 = r6 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 47 load - r4 = __umulhi(r4, r2); // 48 mulhi - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xf572bdb9u : 0xa8bae6dfu); // 49 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 50 shfl - r6 = r6 + r0 + ((((sel >> 19u) & 1u) != 0u) ? 0x11e17c61u : 0x383b9260u); // 51 add - r5 = r5 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 52 load - r6 = rotl_imm(r6, 12u); // 53 rotl - r3 = rotl_imm(r3, 12u); // 54 rotl - r2 = r2 + r1 + ((((sel >> 10u) & 1u) != 0u) ? 0x18d67dbbu : 0xac6be8e3u); // 55 add - r1 = r1 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 56 load - r5 = r5 + r0 + ((((sel >> 12u) & 1u) != 0u) ? 0xa75cd60du : 0xf03673feu); // 57 add - r5 = r5 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & mask]; // 58 load - r1 = r1 + r4 + ((((sel >> 7u) & 1u) != 0u) ? 0x8dfb96bbu : 0xdecd4794u); // 59 add - r3 = __umulhi(r3, r2); // 60 mulhi - r6 = r6 | r4; // 61 or - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 8); // 62 shfl - r3 = r3 ^ ds[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 63 load + r7 = rotl_imm(r7, 4u); // 0 rotl + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 1 load + r7 = r1 * r2 + r7; // 2 mad + r3 = __umulhi(r3, r0); // 3 mulhi + r0 = r0 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 4 load + r1 = r7 * r5 + r1; // 5 mad + r6 = r6 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 6 load + r1 = r1 * r0; // 7 mul + r3 = __umulhi(r3, r6); // 8 mulhi + r1 = r1 * r5; // 9 mul + r6 = r6 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 10 load + r2 = rotl_imm(r2, 29u); // 11 rotl + r1 = r1 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 12 load + r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x3dfa4fd3u : 0x2adfcf68u); // 13 add + r7 = r6 * r7 + r7; // 14 mad + r3 = r3 ^ r1; // 15 xor + r4 = rotr_var(r4, r1); // 16 rotr + r0 = r0 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0x07ec281fu : 0x80dfe651u); // 17 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 1); // 18 shfl + r2 = r2 - r5; // 19 sub + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 20 load + r0 = r2 * r1 + r0; // 21 mad + r3 = r3 - r1; // 22 sub + r4 = r6 * r6 + r4; // 23 mad + r1 = rotr_var(r1, r0); // 24 rotr + r6 = r6 | r2; // 25 or + r6 = __umulhi(r6, r3); // 26 mulhi + r4 = r4 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 27 load + r4 = r3 * r5 + r4; // 28 mad + r6 = r6 - r5; // 29 sub + r6 = r6 ^ ds[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 30 load + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 31 shfl + r2 = r2 - r1; // 32 sub + r4 = r4 ^ r1; // 33 xor + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // 34 shfl + r7 = r7 ^ ds[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & mask]; // 35 load + r5 = r5 + r6 + ((((sel >> 11u) & 1u) != 0u) ? 0x8a978b3cu : 0x165f4767u); // 36 add + r5 = r5 * r2; // 37 mul + r7 = r1 * r4 + r7; // 38 mad + r5 = r5 ^ r7; // 39 xor + r1 = r1 ^ ds[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 40 load + r2 = r2 ^ ds[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 41 load + r5 = r5 ^ r2; // 42 xor + r1 = r1 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 43 load + r6 = r6 + r4 + ((((sel >> 18u) & 1u) != 0u) ? 0xd11e2febu : 0x7950576cu); // 44 add + r6 = r6 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 45 load + r1 = rotr_var(r1, r3); // 46 rotr + r6 = __umulhi(r6, r1); // 47 mulhi + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // 48 shfl + r4 = rotr_var(r4, r5); // 49 rotr + r0 = r0 * r7; // 50 mul + r5 = r6 * r5 + r5; // 51 mad + r3 = r3 ^ ds[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & mask]; // 52 load + r5 = r5 ^ ds[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & mask]; // 53 load + r6 = r6 ^ ds[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & mask]; // 54 load + r5 = rotl_imm(r5, 18u); // 55 rotl + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // 56 shfl + r5 = r5 ^ r0; // 57 xor + r1 = rotl_imm(r1, 28u); // 58 rotl + r0 = r0 - r7; // 59 sub + r1 = rotr_var(r1, r0); // 60 rotr + r1 = r1 * r0; // 61 mul + r6 = r6 ^ r0; // 62 xor + r5 = r5 * r4; // 63 mul // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint32_t sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + ((((sel >> 16u) & 1u) != 0u) ? 0x06575fd2u : 0xecb44e9cu); // s1 add - r5 = __umulhi(r5, r0); // s2 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s3 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 1); // s4 shfl - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r5, 8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = __umulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + ((((sel >> 29u) & 1u) != 0u) ? 0x41da8352u : 0x78295146u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + ((((sel >> 12u) & 1u) != 0u) ? 0x491bea93u : 0x1126a483u); // s15 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = __umulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0xd0df3d0au : 0x7289ac7cu); // s21 add - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s22 shfl - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = __umulhi(r4, r2); // s27 mulhi - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = __umulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + ((((sel >> 4u) & 1u) != 0u) ? 0xb3e87396u : 0xfe2b1c7du); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + ((((sel >> 16u) & 1u) != 0u) ? 0x31a906adu : 0xe036a560u); // s39 add - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + ((((sel >> 27u) & 1u) != 0u) ? 0xc839ad2eu : 0xd802a3efu); // s48 add - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s49 shfl - r6 = r6 + r0 + ((((sel >> 18u) & 1u) != 0u) ? 0xe9d06965u : 0x8e71c4c0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = __umulhi(r0, r2); // s55 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s56 shfl - r1 = r1 + r2 + ((((sel >> 21u) & 1u) != 0u) ? 0x5b84a832u : 0xb0eb7d4eu); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0x4e1a16c6u : 0xd35e37c1u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + ((((sel >> 27u) & 1u) != 0u) ? 0xec29413au : 0x16221227u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + ((((sel >> 4u) & 1u) != 0u) ? 0x85c0f694u : 0x5708524au); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r1, 2); // s77 shfl - r5 = r5 + r0 + ((((sel >> 26u) & 1u) != 0u) ? 0xad4f292bu : 0xc4195db9u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s86 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s90 shfl - r5 = r5 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0xb41704ddu : 0x5570a07eu); // s91 add - r0 = __umulhi(r0, r1); // s92 mulhi - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s93 shfl - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0x4674baa3u : 0xcd1be982u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + ((((sel >> 7u) & 1u) != 0u) ? 0x3d25f873u : 0x60f87347u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r6, 4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + ((((sel >> 22u) & 1u) != 0u) ? 0x018722b4u : 0x9a16bcfbu); // s106 add - r2 = r2 + r5 + ((((sel >> 6u) & 1u) != 0u) ? 0x44cbb3d8u : 0xbc4b5e44u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = __umulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = __umulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + ((((sel >> 16u) & 1u) != 0u) ? 0x153e7b81u : 0x227a1887u); // s121 add - r6 = r6 + r3 + ((((sel >> 31u) & 1u) != 0u) ? 0x537e0843u : 0xfbb1908bu); // s122 add - r4 = __umulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + ((((sel >> 15u) & 1u) != 0u) ? 0xc2875857u : 0xc3e1337du); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s130 shfl - r4 = r4 + r0 + ((((sel >> 5u) & 1u) != 0u) ? 0x39900c5eu : 0x87bd1ad9u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + ((((sel >> 28u) & 1u) != 0u) ? 0xcb7e81cau : 0xc59dd71du); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + ((((sel >> 9u) & 1u) != 0u) ? 0x602dc90du : 0x273f8ee2u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + ((((sel >> 17u) & 1u) != 0u) ? 0xb3e8ca69u : 0x6f435830u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = __umulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + ((((sel >> 18u) & 1u) != 0u) ? 0xe88bec07u : 0x7b5c68f7u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s167 shfl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s172 shfl - r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0xadc930fcu : 0xc53a1209u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = __umulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + ((((sel >> 16u) & 1u) != 0u) ? 0x36cdb68eu : 0x2def94b8u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + ((((sel >> 5u) & 1u) != 0u) ? 0x230f4372u : 0x774065efu); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + ((((sel >> 18u) & 1u) != 0u) ? 0xbc379c7cu : 0x8c37e75bu); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = __umulhi(r1, r0); // s187 mulhi - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x8751e547u : 0x2f8a59eeu); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + ((((sel >> 2u) & 1u) != 0u) ? 0x02b9bb4cu : 0x0f369a86u); // s197 add - r4 = r4 + r2 + ((((sel >> 11u) & 1u) != 0u) ? 0x74240d4cu : 0xe7922061u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x7649c3c3u : 0xee0e3356u); // s200 add - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r1, 16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r2, 1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + ((((sel >> 23u) & 1u) != 0u) ? 0x3d8f8187u : 0xc8db10a0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r2, 8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r3, 2); // s216 shfl - r2 = __umulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r1, 8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = __umulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = __umulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + ((((sel >> 24u) & 1u) != 0u) ? 0xd5a3fb54u : 0x689cdcf5u); // s224 add - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r7, 16); // s225 shfl - r3 = __umulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + ((((sel >> 8u) & 1u) != 0u) ? 0xba3b9728u : 0x267f928du); // s228 add - r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0xa437db0eu : 0xed6dd62au); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x1c000e82u : 0x9f612006u); // s238 add - r7 = __umulhi(r7, r5); // s239 mulhi - r3 = __umulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + ((((sel >> 13u) & 1u) != 0u) ? 0x12705678u : 0x83ba196cu); // s244 add - r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0xea712528u : 0xa5d39c13u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r0, 2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s249 shfl - r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s250 shfl - r5 = r5 + r3 + ((((sel >> 21u) & 1u) != 0u) ? 0x26ce965fu : 0x3006c6ebu); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = __umulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + ((((sel >> 1u) & 1u) != 0u) ? 0x9e34c13fu : 0xc2f46c6du); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0x12eb25c3u : 0x7281530eu); // s4 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x47f0ce9fu : 0xd4a7ed9eu); // s10 add + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x39d16785u : 0x80b09095u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + ((((sel >> 29u) & 1u) != 0u) ? 0xdca22ff9u : 0xdea5ac3fu); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r0, 4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = __umulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = __umulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + ((((sel >> 8u) & 1u) != 0u) ? 0xf7b2ae68u : 0xd4145381u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + ((((sel >> 23u) & 1u) != 0u) ? 0x08943973u : 0x3c843ffeu); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = __umulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = __umulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + ((((sel >> 25u) & 1u) != 0u) ? 0xaeef7b36u : 0x3725676au); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + ((((sel >> 13u) & 1u) != 0u) ? 0xd4d858e5u : 0x41cd8f60u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + ((((sel >> 6u) & 1u) != 0u) ? 0xfa91d5a6u : 0x8f5932f9u); // s57 add + r3 = r3 + r7 + ((((sel >> 8u) & 1u) != 0u) ? 0x970ece18u : 0xe7f14444u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + ((((sel >> 27u) & 1u) != 0u) ? 0xd55319ebu : 0x7c44e743u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + ((((sel >> 16u) & 1u) != 0u) ? 0x542db8e4u : 0x811bed22u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + ((((sel >> 24u) & 1u) != 0u) ? 0x33eeb746u : 0x6a3a9047u); // s66 add + r7 = r7 + r4 + ((((sel >> 22u) & 1u) != 0u) ? 0x27aae05fu : 0x4e0c939du); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + ((((sel >> 2u) & 1u) != 0u) ? 0x9e39c430u : 0x44e0e964u); // s71 add + r4 = __umulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = __umulhi(r1, r0); // s77 mulhi + r2 = __umulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + ((((sel >> 21u) & 1u) != 0u) ? 0xc3a9acb8u : 0x61f3d247u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ __shfl_xor_sync(0xffffffffu, r3, 16); // s84 shfl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s85 shfl + r1 = r1 + r5 + ((((sel >> 29u) & 1u) != 0u) ? 0x8aac6339u : 0x693f4b88u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r7, 8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = __umulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s96 shfl + r6 = r6 ^ __shfl_xor_sync(0xffffffffu, r5, 1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + ((((sel >> 23u) & 1u) != 0u) ? 0x227996ecu : 0x7c3da932u); // s103 add + r1 = r1 + r0 + ((((sel >> 31u) & 1u) != 0u) ? 0x924ae879u : 0x7f163b1bu); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = __umulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + ((((sel >> 15u) & 1u) != 0u) ? 0x21e83993u : 0xa288a176u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + ((((sel >> 10u) & 1u) != 0u) ? 0x0f2327f2u : 0x9df51761u); // s121 add + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r7, 1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + ((((sel >> 7u) & 1u) != 0u) ? 0x2ebd98a2u : 0x19c0a4f8u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ __shfl_xor_sync(0xffffffffu, r4, 16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = __umulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + ((((sel >> 9u) & 1u) != 0u) ? 0x70024b77u : 0xd49ef2cfu); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + ((((sel >> 3u) & 1u) != 0u) ? 0x4c39b70bu : 0x96954048u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + ((((sel >> 9u) & 1u) != 0u) ? 0x3c3cdf42u : 0x5b35ff4au); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + ((((sel >> 31u) & 1u) != 0u) ? 0x0b3bd787u : 0xc2137621u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + ((((sel >> 28u) & 1u) != 0u) ? 0x7f3d99bfu : 0xaf6409eau); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = __umulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + ((((sel >> 4u) & 1u) != 0u) ? 0x084ad732u : 0xbf35527cu); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = __umulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + ((((sel >> 11u) & 1u) != 0u) ? 0x9e1aa79bu : 0x4d9683b5u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + ((((sel >> 18u) & 1u) != 0u) ? 0x47f22138u : 0xa33023afu); // s171 add + r3 = r3 + r4 + ((((sel >> 17u) & 1u) != 0u) ? 0xb4561a0cu : 0xb4c0dd62u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r6, 2); // s174 shfl + r4 = r4 + r2 + ((((sel >> 18u) & 1u) != 0u) ? 0x50dcdd8du : 0xc9a1b546u); // s175 add + r6 = r6 + r1 + ((((sel >> 16u) & 1u) != 0u) ? 0xeb88782du : 0x6d7dd3a8u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = __umulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + ((((sel >> 2u) & 1u) != 0u) ? 0x15f552efu : 0xf5421b9au); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + ((((sel >> 15u) & 1u) != 0u) ? 0xda481a5du : 0x1c29c85bu); // s201 add + r5 = r5 * r3; // s202 mul + r5 = __umulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + ((((sel >> 15u) & 1u) != 0u) ? 0xbff40052u : 0x7975e016u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = __umulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + ((((sel >> 24u) & 1u) != 0u) ? 0xb1f05c54u : 0x57f3f8acu); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ __shfl_xor_sync(0xffffffffu, r0, 8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r2, 4); // s219 shfl + r0 = r0 ^ __shfl_xor_sync(0xffffffffu, r3, 1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ __shfl_xor_sync(0xffffffffu, r3, 8); // s223 shfl + r4 = r4 + r2 + ((((sel >> 3u) & 1u) != 0u) ? 0x1023c67eu : 0xa0235028u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + ((((sel >> 17u) & 1u) != 0u) ? 0x410d0f7au : 0xf2e2fbbau); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ __shfl_xor_sync(0xffffffffu, r4, 4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = __umulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + ((((sel >> 1u) & 1u) != 0u) ? 0x90b2f1c9u : 0xf495035bu); // s241 add + r5 = r5 + r1 + ((((sel >> 19u) & 1u) != 0u) ? 0x43fe7580u : 0xad76bafbu); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ __shfl_xor_sync(0xffffffffu, r5, 2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + ((((sel >> 23u) & 1u) != 0u) ? 0xa1eaac90u : 0x7b0d685du); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + ((((sel >> 26u) & 1u) != 0u) ? 0xca0faca7u : 0x14c6d26au); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + ((((sel >> 14u) & 1u) != 0u) ? 0xf887f9eau : 0x5c6e41f5u); // s254 add + r7 = r7 + r6 + ((((sel >> 19u) & 1u) != 0u) ? 0x1eeb32d4u : 0x9389bb50u); // s255 add } } uint32_t lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/program.h b/proto-cuda/packs-ca3-v4/v4-era-5/program.h index 11c7c9895..b29376beb 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/program.h +++ b/proto-cuda/packs-ca3-v4/v4-era-5/program.h @@ -14,8 +14,8 @@ #define IGNEUM_SEED_STRING "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000" #define IGNEUM_SEED_BYTES_HEX "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07" #define IGNEUM_GENERATOR 4 -#define IGNEUM_PROGRAM_ATTEMPT 0 -#define IGNEUM_PROGRAM_ID 0xc120d7963abdcd96ull +#define IGNEUM_PROGRAM_ATTEMPT 1 +#define IGNEUM_PROGRAM_ID 0xa785001687d8688aull #define IGNEUM_DAY_STRING "bytes:69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY_BYTES_HEX "69676e65756d2d6461792ffa50000000000000" #define IGNEUM_DAY0 0xceed56d7u @@ -27,11 +27,12 @@ #define IGNEUM_INSTR_COUNT 64 #define IGNEUM_LOADS_PER_HASH 128 #define IGNEUM_WIDE_LOADS_PER_HASH 0 -#define IGNEUM_OP_MIX "load=16 add=15 shfl=6 mad=4 or=4 rotl=4 rotr=4 xor=4 mulhi=3 mul=2 sub=2" +#define IGNEUM_OP_MIX "load=16 mad=8 mul=6 xor=6 rotr=5 shfl=5 sub=5 add=4 mulhi=4 rotl=4 or=1" // Program class v4 (Counter ASIC 3.0, docs/plans/counter-asic-3-node.md): generator version 4, class v3 plus the // latency-shadow block (IGNEUM_SHADOW_INSTRS x IGNEUM_SHADOW_REPS per iteration); a worker that runs another class // refuses this pack, and a job line names the class it wants (class=v4 era=). #define IGNEUM_PROGRAM_CLASS "v4" +#define IGNEUM_PROGRAM_SUBVERSION 3 #define IGNEUM_ERA_SEED_HEX "7f450623297a954f493ca08abcdfe7142bb753900abcee38256266007b4b48b7" // Class v3 construction (Counter ASIC 2.0, 5 October 2026, docs/plans/mixer-x4.md): version 2 loads; the dataset item // derivation applies the mixer IGNEUM_MIXER_MULT times per round (memhard.h), and the cache follows the growth rule. @@ -55,18 +56,18 @@ #define IGNEUM_ERA_STRIDE_MUL 0x03ac37adu #define IGNEUM_ERA_STRIDE_ROT 22 #define IGNEUM_ERA_INTERLEAVE { 0, 2, 10, 13 } -#define IGNEUM_ERA_WINDOWS "7:2:1 8:1:1 9:1:1 10:1:1 11:0:0 13:1:1 29:0:0 30:2:2 31:1:1 44:1:1 46:2:0 47:0:0 52:0:0 56:0:0 58:2:0 63:1:1" +#define IGNEUM_ERA_WINDOWS "1:2:3 4:2:1 6:2:1 10:1:1 12:0:0 20:0:0 27:0:0 30:0:0 35:2:3 40:0:0 41:2:1 43:0:0 45:2:1 52:1:1 53:0:0 54:2:1" // Latency-shadow block (Counter ASIC 3.0 item 8, docs/analysis/latency-shadow-2026-10-06.md): NOT the lottery hash. A block of // IGNEUM_SHADOW_INSTRS ALU instructions (the ten non-load families) runs IGNEUM_SHADOW_REPS times at the end of every // iteration; the 16 loads, the acceptance rule and the base program are the class's without the shadow. #define IGNEUM_SHADOW_INSTRS 256 #define IGNEUM_SHADOW_REPS 27 #define IGNEUM_SHADOW_INSTRS_PER_HASH 55296 -#define IGNEUM_SHADOW_OP_MIX "add=43 shfl=39 xor=29 mul=27 mad=26 rotl=26 mulhi=20 rotr=18 or=14 sub=14" +#define IGNEUM_SHADOW_OP_MIX "add=45 xor=39 mad=29 mul=25 rotl=23 sub=23 shfl=22 rotr=18 mulhi=16 or=16" // 0 = closed-form dataset (ds_elem), 1 = memory-hard cache construction (MEMHARD.md, memhard.h) #define IGNEUM_DATASET_MODE 1 -#define IGNEUM_SEEDW_INIT { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u } +#define IGNEUM_SEEDW_INIT { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu } #define IGNEUM_KEY_INIT { 0xceed56d7u, 0x9ba270d2u, 0x82caab2du, 0x81ebce0eu, 0x12b6ecf1u, 0xd0f3fd7cu, 0xd872eefeu, 0xc158c7bdu } #define IGNEUM_CACHE_LOG2_WORDS 26 #define IGNEUM_CACHE_SEGMENT_LOG2_LINES 6 diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/program.json b/proto-cuda/packs-ca3-v4/v4-era-5/program.json index 8dae1d59a..fd1a13e07 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/program.json +++ b/proto-cuda/packs-ca3-v4/v4-era-5/program.json @@ -1,13 +1,13 @@ { "format": "igneum-program-pack-3", "generator": 4, - "attempt": 0, - "program_id": "0xc120d7963abdcd96", + "attempt": 1, + "program_id": "0xa785001687d8688a", "program_id_derivation": "FNV-1a 64 over 'igneum-program/' || generator_le32 || seed_words as little-endian bytes || attempt_le32", "dataset_mode": "memory-hard", "seed": "igneum-epoch/edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07/day/69676e65756d2d6461792ffa50000000000000", "seed_bytes": "edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07", - "seed_words": ["0x667d0fbd", "0x7b8e5963", "0x31c67e5e", "0x4529ddc6", "0xef19d6d8", "0xaccf6211", "0xda0aed32", "0xabc6df31"], + "seed_words": ["0x29e76ddb", "0xdb25cf2a", "0x596c281e", "0xb8284534", "0x50556ce6", "0x336eb6d5", "0x01933285", "0x39690d9f"], "seed_derivation": "seed_words = FNV-1a 64 over seed_bytes (attempt 0) or seed_bytes || attempt_le32 (attempt k >= 1), basis ^ (salt * 0x9E3779B97F4A7C15) for salt 0..3, then h ^= h>>33; h *= 0xff51afd7ed558ccd; h ^= h>>33; words[2*salt] = low 32, words[2*salt+1] = high 32", "generator_rule": "version 2: exactly 16 load slots drawn first from instructions 1..63 (partial Fisher-Yates), the other 48 ops from the ten non-load weights (sum 75); a load's source is drawn from the registers other than dst written by an earlier instruction and not read by a load since; the candidate must pass the acceptance rule of spec 01 section 1.4.6 (static: no cyclically stale load source, every register has an injecting write; dynamic: 64 units on the seed-keyed closed-form dataset with no constant register bit, no lane-constant load site, under 164 saturated final values, every output bit within 136 of 1024, distinct addresses above 245760), else the next attempt of the seed is tried", "lanes": 32, @@ -16,6 +16,7 @@ "instruction_count": 64, "loads_per_hash": 128, "program_class": "v4", + "sub_version": 3, "era_seed_bytes": "7f450623297a954f493ca08abcdfe7142bb753900abcee38256266007b4b48b7", "load_class": "mx8-eraf897c84e+sh256x27", "mixer_mult": 8, @@ -40,7 +41,7 @@ "dataset_word": "dataset[w] = item(t(w))[j(w)]: j(w) gathers the bits of w at the interleave positions, t(w) is w with those bits removed", "program_id_suffix": "'era/' || allowed[3] || width_words || stride_mul_le32 || stride_rot_le32 || interleave[4]" }, - "op_mix": {"load": 16, "add": 15, "shfl": 6, "mad": 4, "or": 4, "rotl": 4, "rotr": 4, "xor": 4, "mulhi": 3, "mul": 2, "sub": 2}, + "op_mix": {"load": 16, "mad": 8, "mul": 6, "xor": 6, "rotr": 5, "shfl": 5, "sub": 5, "add": 4, "mulhi": 4, "rotl": 4, "or": 1}, "register_init": "for i in 0..7: x = nonce ^ seed_words[i]; x += 0x9e3779b9 * (i+1) (mod 2^32); x = splitmix32(x); r[i] = x ^ seed_words[(i+1) & 7]", "splitmix32": "x ^= x>>16; x *= 0x7feb352d; x ^= x>>15; x *= 0x846ca68b; x ^= x>>16", "iteration": "sel = r0 sampled once at the top of each iteration, then all instructions in order", @@ -78,328 +79,328 @@ "item": "s[0..7] = key; s[8+i] = t * mul[i] + rc[i] for i in 0..7; for r in 0..7: for j in 0..7: s = M(s, rk = (r * 8 + j + 1) * 0x9E3779B9); line = s[0] & 0x003fffff; s[i] ^= cache[line * 16 + i]; then for j in 0..7: s = M(s, rk = (64 + j + 1) * 0x9E3779B9); item(t) = s", "word": "dataset[w] = item(w >> 4)[w & 15]" }, - "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 43, "shfl": 39, "xor": 29, "mul": 27, "mad": 26, "rotl": 26, "mulhi": 20, "rotr": 18, "or": 14, "sub": 14}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ - {"i": 0, "op": "mul", "dst": 7, "src": 3, "src2": 5, "imm": "0xfe5e2b6e", "imm2": "0xeb4d8108", "rot": 2, "bit": 23, "mask": 2}, - {"i": 1, "op": "add", "dst": 7, "src": 4, "src2": 3, "imm": "0xecb44e9c", "imm2": "0x06575fd2", "rot": 25, "bit": 16, "mask": 16}, - {"i": 2, "op": "mulhi", "dst": 5, "src": 0, "src2": 7, "imm": "0x9d575cf8", "imm2": "0xee83a9b9", "rot": 21, "bit": 4, "mask": 1}, - {"i": 3, "op": "shfl", "dst": 4, "src": 5, "src2": 0, "imm": "0x98784606", "imm2": "0xf94c3e56", "rot": 23, "bit": 3, "mask": 2}, - {"i": 4, "op": "shfl", "dst": 4, "src": 1, "src2": 5, "imm": "0x1c09a3cc", "imm2": "0xd90c6054", "rot": 29, "bit": 24, "mask": 1}, - {"i": 5, "op": "shfl", "dst": 4, "src": 5, "src2": 4, "imm": "0x01029b88", "imm2": "0x67a3c3c9", "rot": 13, "bit": 6, "mask": 8}, - {"i": 6, "op": "sub", "dst": 6, "src": 1, "src2": 6, "imm": "0x2b3ef06c", "imm2": "0x0e3feb0d", "rot": 5, "bit": 9, "mask": 8}, - {"i": 7, "op": "or", "dst": 3, "src": 4, "src2": 7, "imm": "0x6144d12b", "imm2": "0x5a9108b9", "rot": 2, "bit": 27, "mask": 16}, - {"i": 8, "op": "mad", "dst": 0, "src": 4, "src2": 7, "imm": "0x79cb60ef", "imm2": "0xb538e066", "rot": 18, "bit": 19, "mask": 1}, - {"i": 9, "op": "sub", "dst": 3, "src": 4, "src2": 0, "imm": "0xae520f42", "imm2": "0x020901e9", "rot": 28, "bit": 21, "mask": 16}, - {"i": 10, "op": "mul", "dst": 6, "src": 3, "src2": 6, "imm": "0x8d7963c5", "imm2": "0x08eb5c99", "rot": 7, "bit": 12, "mask": 2}, - {"i": 11, "op": "mulhi", "dst": 5, "src": 0, "src2": 3, "imm": "0x736eae8f", "imm2": "0x03d87026", "rot": 17, "bit": 18, "mask": 16}, - {"i": 12, "op": "mad", "dst": 0, "src": 4, "src2": 5, "imm": "0x7e911298", "imm2": "0x4d50d009", "rot": 7, "bit": 14, "mask": 8}, - {"i": 13, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0x78295146", "imm2": "0x41da8352", "rot": 16, "bit": 29, "mask": 8}, - {"i": 14, "op": "xor", "dst": 7, "src": 2, "src2": 5, "imm": "0xe702e92c", "imm2": "0x7fd7ecb5", "rot": 17, "bit": 5, "mask": 4}, - {"i": 15, "op": "add", "dst": 1, "src": 4, "src2": 6, "imm": "0x1126a483", "imm2": "0x491bea93", "rot": 13, "bit": 12, "mask": 8}, - {"i": 16, "op": "shfl", "dst": 1, "src": 2, "src2": 4, "imm": "0xa21b5866", "imm2": "0x46986cb4", "rot": 8, "bit": 8, "mask": 8}, - {"i": 17, "op": "rotr", "dst": 5, "src": 0, "src2": 1, "imm": "0xfafda5ac", "imm2": "0x9f10759e", "rot": 8, "bit": 4, "mask": 2}, - {"i": 18, "op": "sub", "dst": 2, "src": 1, "src2": 1, "imm": "0xf6a4b452", "imm2": "0x73980ef4", "rot": 18, "bit": 18, "mask": 4}, - {"i": 19, "op": "mulhi", "dst": 3, "src": 2, "src2": 0, "imm": "0x8d0916ee", "imm2": "0x7eaa3cd5", "rot": 28, "bit": 12, "mask": 8}, - {"i": 20, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0xabaf6c88", "imm2": "0x9a7284f4", "rot": 4, "bit": 18, "mask": 2}, - {"i": 21, "op": "add", "dst": 2, "src": 3, "src2": 7, "imm": "0x7289ac7c", "imm2": "0xd0df3d0a", "rot": 26, "bit": 31, "mask": 4}, - {"i": 22, "op": "shfl", "dst": 2, "src": 7, "src2": 5, "imm": "0x3d88fa83", "imm2": "0x638c95f0", "rot": 26, "bit": 25, "mask": 2}, - {"i": 23, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xde5da76b", "imm2": "0xedfbe430", "rot": 19, "bit": 10, "mask": 8}, - {"i": 24, "op": "sub", "dst": 1, "src": 2, "src2": 0, "imm": "0x9fcf6309", "imm2": "0xa3db8694", "rot": 26, "bit": 4, "mask": 16}, - {"i": 25, "op": "mad", "dst": 7, "src": 3, "src2": 1, "imm": "0xd6d896c2", "imm2": "0x024c888f", "rot": 4, "bit": 0, "mask": 8}, - {"i": 26, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0xd3330bb1", "imm2": "0x38a6cc66", "rot": 30, "bit": 15, "mask": 2}, - {"i": 27, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x35d8cc82", "imm2": "0x1d3e3647", "rot": 22, "bit": 8, "mask": 8}, - {"i": 28, "op": "shfl", "dst": 1, "src": 2, "src2": 2, "imm": "0xf7f77cb0", "imm2": "0x0c805262", "rot": 13, "bit": 29, "mask": 2}, - {"i": 29, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x31a70269", "imm2": "0xb50c95da", "rot": 27, "bit": 26, "mask": 1}, - {"i": 30, "op": "mulhi", "dst": 7, "src": 6, "src2": 0, "imm": "0x943c199e", "imm2": "0x4c40e216", "rot": 24, "bit": 30, "mask": 8}, - {"i": 31, "op": "rotr", "dst": 2, "src": 7, "src2": 1, "imm": "0xe2dcfc61", "imm2": "0x6277afb6", "rot": 17, "bit": 4, "mask": 2}, - {"i": 32, "op": "rotl", "dst": 6, "src": 3, "src2": 6, "imm": "0x94294e24", "imm2": "0x1cd9a33f", "rot": 26, "bit": 14, "mask": 1}, - {"i": 33, "op": "mul", "dst": 0, "src": 7, "src2": 7, "imm": "0x0ed307ed", "imm2": "0x78df58f9", "rot": 15, "bit": 10, "mask": 1}, - {"i": 34, "op": "mul", "dst": 7, "src": 4, "src2": 7, "imm": "0xfdece04e", "imm2": "0xfc6ffb1c", "rot": 20, "bit": 27, "mask": 8}, - {"i": 35, "op": "mad", "dst": 6, "src": 0, "src2": 1, "imm": "0x86d504f2", "imm2": "0x19102025", "rot": 30, "bit": 10, "mask": 1}, - {"i": 36, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0xfe2b1c7d", "imm2": "0xb3e87396", "rot": 14, "bit": 4, "mask": 2}, - {"i": 37, "op": "rotr", "dst": 7, "src": 4, "src2": 0, "imm": "0x057006cd", "imm2": "0xe6ea534d", "rot": 22, "bit": 18, "mask": 1}, - {"i": 38, "op": "mad", "dst": 5, "src": 2, "src2": 7, "imm": "0xc7625d26", "imm2": "0xb337fac2", "rot": 28, "bit": 19, "mask": 16}, - {"i": 39, "op": "add", "dst": 6, "src": 2, "src2": 0, "imm": "0xe036a560", "imm2": "0x31a906ad", "rot": 13, "bit": 16, "mask": 16}, - {"i": 40, "op": "shfl", "dst": 3, "src": 6, "src2": 1, "imm": "0x44d611f3", "imm2": "0x75af7196", "rot": 9, "bit": 11, "mask": 4}, - {"i": 41, "op": "xor", "dst": 5, "src": 0, "src2": 7, "imm": "0x906a3ed7", "imm2": "0xa9c73c99", "rot": 6, "bit": 17, "mask": 8}, - {"i": 42, "op": "xor", "dst": 5, "src": 3, "src2": 4, "imm": "0x414a90ea", "imm2": "0x9184e622", "rot": 21, "bit": 17, "mask": 4}, - {"i": 43, "op": "rotl", "dst": 6, "src": 5, "src2": 3, "imm": "0x58161888", "imm2": "0xded078af", "rot": 31, "bit": 15, "mask": 2}, - {"i": 44, "op": "rotl", "dst": 0, "src": 5, "src2": 2, "imm": "0xaabde762", "imm2": "0x0f1e27f4", "rot": 6, "bit": 16, "mask": 1}, - {"i": 45, "op": "mad", "dst": 2, "src": 0, "src2": 6, "imm": "0x63b08cf9", "imm2": "0x09908a2b", "rot": 20, "bit": 22, "mask": 1}, - {"i": 46, "op": "mad", "dst": 0, "src": 6, "src2": 0, "imm": "0xf142fb39", "imm2": "0xd5c736b4", "rot": 28, "bit": 21, "mask": 16}, - {"i": 47, "op": "xor", "dst": 5, "src": 2, "src2": 7, "imm": "0x1dd9a881", "imm2": "0xfe4b819f", "rot": 21, "bit": 3, "mask": 1}, - {"i": 48, "op": "add", "dst": 1, "src": 5, "src2": 0, "imm": "0xd802a3ef", "imm2": "0xc839ad2e", "rot": 28, "bit": 27, "mask": 8}, - {"i": 49, "op": "shfl", "dst": 0, "src": 1, "src2": 2, "imm": "0x5e8bde57", "imm2": "0x960a95cf", "rot": 13, "bit": 25, "mask": 2}, - {"i": 50, "op": "add", "dst": 6, "src": 0, "src2": 2, "imm": "0x8e71c4c0", "imm2": "0xe9d06965", "rot": 17, "bit": 18, "mask": 16}, - {"i": 51, "op": "rotl", "dst": 1, "src": 7, "src2": 2, "imm": "0xc5e6bbf6", "imm2": "0x88daa4e7", "rot": 3, "bit": 14, "mask": 4}, - {"i": 52, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x61d216d8", "imm2": "0x7bf2e9c3", "rot": 31, "bit": 24, "mask": 1}, - {"i": 53, "op": "xor", "dst": 5, "src": 6, "src2": 3, "imm": "0xb3cd34c7", "imm2": "0xc496bc19", "rot": 6, "bit": 26, "mask": 8}, - {"i": 54, "op": "mul", "dst": 2, "src": 6, "src2": 0, "imm": "0x52657ff2", "imm2": "0xcf02547a", "rot": 24, "bit": 0, "mask": 2}, - {"i": 55, "op": "mulhi", "dst": 0, "src": 2, "src2": 4, "imm": "0xa50f4a00", "imm2": "0x6d97995b", "rot": 24, "bit": 30, "mask": 2}, - {"i": 56, "op": "shfl", "dst": 6, "src": 3, "src2": 0, "imm": "0xf72d04b9", "imm2": "0x9449b432", "rot": 27, "bit": 24, "mask": 1}, - {"i": 57, "op": "add", "dst": 1, "src": 2, "src2": 6, "imm": "0xb0eb7d4e", "imm2": "0x5b84a832", "rot": 15, "bit": 21, "mask": 4}, - {"i": 58, "op": "rotr", "dst": 0, "src": 1, "src2": 5, "imm": "0x5b51f8c3", "imm2": "0xf6791ab2", "rot": 31, "bit": 10, "mask": 2}, - {"i": 59, "op": "add", "dst": 6, "src": 4, "src2": 1, "imm": "0xd35e37c1", "imm2": "0x4e1a16c6", "rot": 20, "bit": 8, "mask": 1}, - {"i": 60, "op": "or", "dst": 0, "src": 2, "src2": 0, "imm": "0xb3710a70", "imm2": "0x798cbfda", "rot": 18, "bit": 4, "mask": 4}, - {"i": 61, "op": "rotr", "dst": 5, "src": 3, "src2": 3, "imm": "0x75129c5b", "imm2": "0xcb9b6b47", "rot": 28, "bit": 1, "mask": 8}, - {"i": 62, "op": "sub", "dst": 4, "src": 2, "src2": 2, "imm": "0xab8a6c85", "imm2": "0x8d3c8b70", "rot": 2, "bit": 5, "mask": 1}, - {"i": 63, "op": "add", "dst": 0, "src": 1, "src2": 4, "imm": "0x16221227", "imm2": "0xec29413a", "rot": 24, "bit": 27, "mask": 2}, - {"i": 64, "op": "rotl", "dst": 6, "src": 0, "src2": 7, "imm": "0xb940d207", "imm2": "0x04b817f2", "rot": 20, "bit": 31, "mask": 2}, - {"i": 65, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0xf675aa34", "imm2": "0xdeb309ea", "rot": 4, "bit": 10, "mask": 4}, - {"i": 66, "op": "rotl", "dst": 6, "src": 4, "src2": 5, "imm": "0x3f1b4ba7", "imm2": "0x4da6cfdc", "rot": 23, "bit": 6, "mask": 4}, - {"i": 67, "op": "or", "dst": 1, "src": 4, "src2": 2, "imm": "0xcdb688a8", "imm2": "0x216a3f11", "rot": 11, "bit": 22, "mask": 1}, - {"i": 68, "op": "mad", "dst": 7, "src": 4, "src2": 0, "imm": "0x41605fe7", "imm2": "0xd3a5988d", "rot": 29, "bit": 20, "mask": 8}, - {"i": 69, "op": "or", "dst": 1, "src": 5, "src2": 7, "imm": "0x4d48f2c3", "imm2": "0x47644a85", "rot": 21, "bit": 17, "mask": 16}, - {"i": 70, "op": "xor", "dst": 7, "src": 4, "src2": 3, "imm": "0xe6ebd408", "imm2": "0xcb8c12c8", "rot": 25, "bit": 29, "mask": 8}, - {"i": 71, "op": "mul", "dst": 2, "src": 3, "src2": 4, "imm": "0x2468d03d", "imm2": "0x8bbe79d8", "rot": 3, "bit": 27, "mask": 16}, - {"i": 72, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0x0ee57027", "imm2": "0x9403ee2a", "rot": 7, "bit": 11, "mask": 16}, - {"i": 73, "op": "add", "dst": 7, "src": 6, "src2": 3, "imm": "0x5708524a", "imm2": "0x85c0f694", "rot": 21, "bit": 4, "mask": 8}, - {"i": 74, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0xa654c842", "imm2": "0x9128331c", "rot": 14, "bit": 0, "mask": 2}, - {"i": 75, "op": "shfl", "dst": 0, "src": 2, "src2": 1, "imm": "0x1426e90c", "imm2": "0x6fda60bc", "rot": 3, "bit": 16, "mask": 8}, - {"i": 76, "op": "sub", "dst": 5, "src": 7, "src2": 3, "imm": "0x4f69f78a", "imm2": "0x02fbad88", "rot": 24, "bit": 10, "mask": 16}, - {"i": 77, "op": "shfl", "dst": 5, "src": 1, "src2": 7, "imm": "0xe79a2a0e", "imm2": "0x279c4885", "rot": 22, "bit": 18, "mask": 2}, - {"i": 78, "op": "add", "dst": 5, "src": 0, "src2": 3, "imm": "0xc4195db9", "imm2": "0xad4f292b", "rot": 4, "bit": 26, "mask": 16}, - {"i": 79, "op": "mul", "dst": 5, "src": 6, "src2": 2, "imm": "0xb5e31a9c", "imm2": "0xbe647403", "rot": 9, "bit": 25, "mask": 8}, - {"i": 80, "op": "shfl", "dst": 6, "src": 7, "src2": 5, "imm": "0x4b8dac91", "imm2": "0xa848d1cc", "rot": 2, "bit": 20, "mask": 2}, - {"i": 81, "op": "mul", "dst": 5, "src": 6, "src2": 1, "imm": "0xe176a1ad", "imm2": "0xfc322952", "rot": 26, "bit": 9, "mask": 1}, - {"i": 82, "op": "or", "dst": 7, "src": 3, "src2": 3, "imm": "0xb7ec126e", "imm2": "0x7baffaa9", "rot": 6, "bit": 29, "mask": 8}, - {"i": 83, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x645a1340", "imm2": "0x9ee976ae", "rot": 5, "bit": 30, "mask": 16}, - {"i": 84, "op": "rotl", "dst": 4, "src": 3, "src2": 2, "imm": "0x61c1df4b", "imm2": "0x857206ef", "rot": 12, "bit": 7, "mask": 2}, - {"i": 85, "op": "mul", "dst": 3, "src": 4, "src2": 6, "imm": "0xec2e43b4", "imm2": "0x8d5757c3", "rot": 22, "bit": 1, "mask": 2}, - {"i": 86, "op": "shfl", "dst": 0, "src": 2, "src2": 0, "imm": "0x6c65ca2e", "imm2": "0x4834f788", "rot": 23, "bit": 0, "mask": 4}, - {"i": 87, "op": "shfl", "dst": 2, "src": 7, "src2": 6, "imm": "0xb76f0305", "imm2": "0x1aa8ea68", "rot": 14, "bit": 25, "mask": 4}, - {"i": 88, "op": "xor", "dst": 1, "src": 3, "src2": 1, "imm": "0x8a7f5021", "imm2": "0xdd5cb131", "rot": 27, "bit": 16, "mask": 8}, - {"i": 89, "op": "xor", "dst": 5, "src": 1, "src2": 2, "imm": "0x6d746f35", "imm2": "0x3b4e00ef", "rot": 26, "bit": 14, "mask": 8}, - {"i": 90, "op": "shfl", "dst": 6, "src": 1, "src2": 2, "imm": "0xd66909e1", "imm2": "0x10113b61", "rot": 18, "bit": 20, "mask": 16}, - {"i": 91, "op": "add", "dst": 5, "src": 0, "src2": 7, "imm": "0x5570a07e", "imm2": "0xb41704dd", "rot": 2, "bit": 7, "mask": 2}, - {"i": 92, "op": "mulhi", "dst": 0, "src": 1, "src2": 1, "imm": "0xea035c3a", "imm2": "0x40da42e0", "rot": 28, "bit": 0, "mask": 1}, - {"i": 93, "op": "shfl", "dst": 6, "src": 0, "src2": 1, "imm": "0x20d46627", "imm2": "0x6d18141c", "rot": 1, "bit": 27, "mask": 8}, - {"i": 94, "op": "add", "dst": 3, "src": 6, "src2": 7, "imm": "0xcd1be982", "imm2": "0x4674baa3", "rot": 16, "bit": 18, "mask": 8}, - {"i": 95, "op": "rotl", "dst": 4, "src": 1, "src2": 7, "imm": "0x3e33035f", "imm2": "0xb9dd590e", "rot": 24, "bit": 3, "mask": 8}, - {"i": 96, "op": "mad", "dst": 3, "src": 7, "src2": 4, "imm": "0x41aa1a68", "imm2": "0x57a73520", "rot": 7, "bit": 13, "mask": 8}, - {"i": 97, "op": "sub", "dst": 6, "src": 3, "src2": 4, "imm": "0x13fc2afb", "imm2": "0x7a61f225", "rot": 30, "bit": 6, "mask": 2}, - {"i": 98, "op": "mad", "dst": 1, "src": 5, "src2": 6, "imm": "0x7c61b2b8", "imm2": "0xf17c8b35", "rot": 29, "bit": 18, "mask": 8}, - {"i": 99, "op": "rotr", "dst": 6, "src": 2, "src2": 5, "imm": "0x893a00fe", "imm2": "0x1e91b7df", "rot": 14, "bit": 28, "mask": 4}, - {"i": 100, "op": "xor", "dst": 5, "src": 1, "src2": 3, "imm": "0x6153760e", "imm2": "0x04f754ab", "rot": 27, "bit": 18, "mask": 16}, - {"i": 101, "op": "add", "dst": 3, "src": 7, "src2": 6, "imm": "0x60f87347", "imm2": "0x3d25f873", "rot": 25, "bit": 7, "mask": 1}, - {"i": 102, "op": "sub", "dst": 3, "src": 5, "src2": 3, "imm": "0xc048b6a7", "imm2": "0x77660c09", "rot": 19, "bit": 7, "mask": 8}, - {"i": 103, "op": "sub", "dst": 3, "src": 6, "src2": 6, "imm": "0x7b69c617", "imm2": "0x830f5e6d", "rot": 24, "bit": 15, "mask": 16}, - {"i": 104, "op": "shfl", "dst": 1, "src": 6, "src2": 4, "imm": "0x4dd3d618", "imm2": "0x9409762e", "rot": 24, "bit": 26, "mask": 4}, - {"i": 105, "op": "or", "dst": 3, "src": 5, "src2": 2, "imm": "0xd88ad8e9", "imm2": "0xd9be9692", "rot": 26, "bit": 19, "mask": 16}, - {"i": 106, "op": "add", "dst": 0, "src": 1, "src2": 5, "imm": "0x9a16bcfb", "imm2": "0x018722b4", "rot": 21, "bit": 22, "mask": 2}, - {"i": 107, "op": "add", "dst": 2, "src": 5, "src2": 1, "imm": "0xbc4b5e44", "imm2": "0x44cbb3d8", "rot": 21, "bit": 6, "mask": 4}, - {"i": 108, "op": "mad", "dst": 2, "src": 6, "src2": 1, "imm": "0x298112d4", "imm2": "0xe4846636", "rot": 17, "bit": 20, "mask": 2}, - {"i": 109, "op": "xor", "dst": 0, "src": 1, "src2": 5, "imm": "0x4100bbe5", "imm2": "0x896888e9", "rot": 29, "bit": 19, "mask": 2}, - {"i": 110, "op": "or", "dst": 4, "src": 2, "src2": 7, "imm": "0xc82eac02", "imm2": "0x87751aa9", "rot": 22, "bit": 28, "mask": 16}, - {"i": 111, "op": "rotl", "dst": 2, "src": 1, "src2": 0, "imm": "0x8d1ade42", "imm2": "0x9c40df71", "rot": 13, "bit": 8, "mask": 16}, - {"i": 112, "op": "mulhi", "dst": 5, "src": 2, "src2": 7, "imm": "0x72d97749", "imm2": "0xbb813754", "rot": 21, "bit": 29, "mask": 8}, - {"i": 113, "op": "xor", "dst": 5, "src": 1, "src2": 7, "imm": "0x5f71704c", "imm2": "0xe586e7c4", "rot": 10, "bit": 27, "mask": 8}, - {"i": 114, "op": "rotl", "dst": 0, "src": 3, "src2": 1, "imm": "0x8240f1ba", "imm2": "0x4875df3f", "rot": 15, "bit": 29, "mask": 1}, - {"i": 115, "op": "mul", "dst": 7, "src": 0, "src2": 0, "imm": "0xe58f5eea", "imm2": "0xfbb11c8b", "rot": 2, "bit": 1, "mask": 4}, - {"i": 116, "op": "mad", "dst": 0, "src": 7, "src2": 0, "imm": "0x5be825c2", "imm2": "0x78fc5ac2", "rot": 28, "bit": 29, "mask": 8}, - {"i": 117, "op": "rotl", "dst": 4, "src": 1, "src2": 1, "imm": "0x068ac28a", "imm2": "0xb9b2d080", "rot": 12, "bit": 27, "mask": 16}, - {"i": 118, "op": "mul", "dst": 1, "src": 6, "src2": 6, "imm": "0xca7b0114", "imm2": "0x8120bdff", "rot": 13, "bit": 27, "mask": 1}, - {"i": 119, "op": "mulhi", "dst": 0, "src": 3, "src2": 4, "imm": "0x72f1db15", "imm2": "0xd763290a", "rot": 16, "bit": 17, "mask": 4}, - {"i": 120, "op": "mad", "dst": 4, "src": 0, "src2": 0, "imm": "0x1738e691", "imm2": "0x40c41a1f", "rot": 13, "bit": 15, "mask": 16}, - {"i": 121, "op": "add", "dst": 0, "src": 5, "src2": 7, "imm": "0x227a1887", "imm2": "0x153e7b81", "rot": 13, "bit": 16, "mask": 4}, - {"i": 122, "op": "add", "dst": 6, "src": 3, "src2": 5, "imm": "0xfbb1908b", "imm2": "0x537e0843", "rot": 3, "bit": 31, "mask": 2}, - {"i": 123, "op": "mulhi", "dst": 4, "src": 5, "src2": 4, "imm": "0x9f4a05d3", "imm2": "0xc3544292", "rot": 2, "bit": 28, "mask": 1}, - {"i": 124, "op": "xor", "dst": 3, "src": 1, "src2": 3, "imm": "0x117f8a26", "imm2": "0x295117bc", "rot": 26, "bit": 23, "mask": 4}, - {"i": 125, "op": "add", "dst": 3, "src": 7, "src2": 1, "imm": "0xc3e1337d", "imm2": "0xc2875857", "rot": 19, "bit": 15, "mask": 2}, - {"i": 126, "op": "rotr", "dst": 4, "src": 7, "src2": 5, "imm": "0x29267284", "imm2": "0x31f748ca", "rot": 21, "bit": 23, "mask": 8}, - {"i": 127, "op": "shfl", "dst": 1, "src": 0, "src2": 5, "imm": "0xa6b542d0", "imm2": "0x0e488c4f", "rot": 2, "bit": 14, "mask": 2}, - {"i": 128, "op": "rotr", "dst": 3, "src": 6, "src2": 4, "imm": "0xe878c8e6", "imm2": "0x3a43ac1a", "rot": 24, "bit": 30, "mask": 8}, - {"i": 129, "op": "mul", "dst": 1, "src": 0, "src2": 7, "imm": "0x926a789c", "imm2": "0xb1d1742f", "rot": 5, "bit": 21, "mask": 16}, - {"i": 130, "op": "shfl", "dst": 4, "src": 1, "src2": 2, "imm": "0x95146814", "imm2": "0x38d6edcd", "rot": 15, "bit": 17, "mask": 16}, - {"i": 131, "op": "add", "dst": 4, "src": 0, "src2": 4, "imm": "0x87bd1ad9", "imm2": "0x39900c5e", "rot": 25, "bit": 5, "mask": 1}, - {"i": 132, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x29506758", "imm2": "0x756d6e2b", "rot": 26, "bit": 6, "mask": 2}, - {"i": 133, "op": "mul", "dst": 4, "src": 2, "src2": 2, "imm": "0xbc67d1c5", "imm2": "0xb2a46381", "rot": 23, "bit": 2, "mask": 2}, - {"i": 134, "op": "mad", "dst": 5, "src": 6, "src2": 0, "imm": "0x8d8296f3", "imm2": "0x1d77ab51", "rot": 29, "bit": 30, "mask": 16}, - {"i": 135, "op": "mad", "dst": 4, "src": 5, "src2": 4, "imm": "0x9864ce1f", "imm2": "0x90aa7ca1", "rot": 21, "bit": 14, "mask": 4}, - {"i": 136, "op": "add", "dst": 6, "src": 3, "src2": 0, "imm": "0xc59dd71d", "imm2": "0xcb7e81ca", "rot": 12, "bit": 28, "mask": 8}, - {"i": 137, "op": "mul", "dst": 7, "src": 5, "src2": 2, "imm": "0x6584f1e0", "imm2": "0x4fd64dc0", "rot": 16, "bit": 25, "mask": 8}, - {"i": 138, "op": "mul", "dst": 6, "src": 3, "src2": 4, "imm": "0x8ba7f74c", "imm2": "0xfe194e7c", "rot": 20, "bit": 22, "mask": 1}, - {"i": 139, "op": "rotr", "dst": 0, "src": 4, "src2": 3, "imm": "0x8f198cb8", "imm2": "0xf1643254", "rot": 13, "bit": 22, "mask": 8}, - {"i": 140, "op": "shfl", "dst": 3, "src": 5, "src2": 6, "imm": "0x12d58c6a", "imm2": "0xc0df61e4", "rot": 12, "bit": 20, "mask": 16}, - {"i": 141, "op": "rotr", "dst": 6, "src": 7, "src2": 3, "imm": "0x4b531a73", "imm2": "0xd0d06219", "rot": 10, "bit": 23, "mask": 1}, - {"i": 142, "op": "mul", "dst": 3, "src": 7, "src2": 7, "imm": "0x098bdd13", "imm2": "0x32895e1a", "rot": 15, "bit": 28, "mask": 1}, - {"i": 143, "op": "add", "dst": 0, "src": 7, "src2": 4, "imm": "0x273f8ee2", "imm2": "0x602dc90d", "rot": 24, "bit": 9, "mask": 2}, - {"i": 144, "op": "rotl", "dst": 5, "src": 6, "src2": 0, "imm": "0x941dcf22", "imm2": "0x9e794182", "rot": 26, "bit": 29, "mask": 4}, - {"i": 145, "op": "xor", "dst": 2, "src": 4, "src2": 3, "imm": "0xa05d46ba", "imm2": "0x5531e463", "rot": 12, "bit": 17, "mask": 2}, - {"i": 146, "op": "shfl", "dst": 6, "src": 5, "src2": 2, "imm": "0xb0756734", "imm2": "0x234aa1ba", "rot": 17, "bit": 25, "mask": 16}, - {"i": 147, "op": "mul", "dst": 1, "src": 4, "src2": 0, "imm": "0xc793d1f4", "imm2": "0x3bc0638f", "rot": 2, "bit": 15, "mask": 2}, - {"i": 148, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xe119f195", "imm2": "0xfbcf0ce6", "rot": 26, "bit": 29, "mask": 1}, - {"i": 149, "op": "rotr", "dst": 7, "src": 2, "src2": 3, "imm": "0xe45f4896", "imm2": "0xa4cd37ba", "rot": 28, "bit": 26, "mask": 1}, - {"i": 150, "op": "rotr", "dst": 7, "src": 3, "src2": 0, "imm": "0xe025b7d5", "imm2": "0xa8dc1168", "rot": 6, "bit": 30, "mask": 2}, - {"i": 151, "op": "add", "dst": 5, "src": 2, "src2": 1, "imm": "0x6f435830", "imm2": "0xb3e8ca69", "rot": 23, "bit": 17, "mask": 8}, - {"i": 152, "op": "xor", "dst": 6, "src": 2, "src2": 6, "imm": "0x6fcb7a5a", "imm2": "0x159a6b6c", "rot": 8, "bit": 31, "mask": 8}, - {"i": 153, "op": "shfl", "dst": 1, "src": 2, "src2": 3, "imm": "0xb9d4ff9a", "imm2": "0x852cc51e", "rot": 8, "bit": 31, "mask": 16}, - {"i": 154, "op": "xor", "dst": 2, "src": 6, "src2": 6, "imm": "0x26ed4738", "imm2": "0x3622f4c4", "rot": 24, "bit": 29, "mask": 16}, - {"i": 155, "op": "rotr", "dst": 5, "src": 7, "src2": 0, "imm": "0x11938c76", "imm2": "0xebfffd0f", "rot": 27, "bit": 12, "mask": 4}, - {"i": 156, "op": "shfl", "dst": 1, "src": 3, "src2": 1, "imm": "0xb14cac3d", "imm2": "0x4b29eac7", "rot": 12, "bit": 27, "mask": 4}, - {"i": 157, "op": "xor", "dst": 6, "src": 5, "src2": 0, "imm": "0xd79766fb", "imm2": "0xb14c8405", "rot": 6, "bit": 24, "mask": 16}, - {"i": 158, "op": "xor", "dst": 0, "src": 7, "src2": 6, "imm": "0xddadbf78", "imm2": "0x1531802d", "rot": 29, "bit": 15, "mask": 4}, - {"i": 159, "op": "xor", "dst": 0, "src": 7, "src2": 4, "imm": "0x0b1a06aa", "imm2": "0xcdbc77ac", "rot": 17, "bit": 19, "mask": 2}, - {"i": 160, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0x55c10e82", "imm2": "0x94a0ea39", "rot": 15, "bit": 31, "mask": 8}, - {"i": 161, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xe838ce69", "imm2": "0xe8b04d2b", "rot": 8, "bit": 7, "mask": 16}, - {"i": 162, "op": "rotr", "dst": 4, "src": 0, "src2": 7, "imm": "0x7878ae1e", "imm2": "0x85e7e9c5", "rot": 14, "bit": 15, "mask": 8}, - {"i": 163, "op": "mad", "dst": 4, "src": 1, "src2": 2, "imm": "0x56ad03fc", "imm2": "0xa3f4b771", "rot": 20, "bit": 19, "mask": 16}, - {"i": 164, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7b5c68f7", "imm2": "0xe88bec07", "rot": 19, "bit": 18, "mask": 2}, - {"i": 165, "op": "rotl", "dst": 0, "src": 3, "src2": 5, "imm": "0x311ef5aa", "imm2": "0x2ff76b76", "rot": 13, "bit": 22, "mask": 4}, - {"i": 166, "op": "xor", "dst": 2, "src": 6, "src2": 3, "imm": "0x7e89cc0a", "imm2": "0xcb97959d", "rot": 7, "bit": 14, "mask": 1}, - {"i": 167, "op": "shfl", "dst": 5, "src": 4, "src2": 6, "imm": "0x2900556b", "imm2": "0x1b467953", "rot": 7, "bit": 9, "mask": 16}, - {"i": 168, "op": "shfl", "dst": 2, "src": 7, "src2": 2, "imm": "0x235202e1", "imm2": "0xc077885f", "rot": 14, "bit": 25, "mask": 2}, - {"i": 169, "op": "xor", "dst": 7, "src": 6, "src2": 6, "imm": "0x1fca476c", "imm2": "0xeafc0b19", "rot": 1, "bit": 10, "mask": 8}, - {"i": 170, "op": "mad", "dst": 0, "src": 7, "src2": 2, "imm": "0x487fd092", "imm2": "0x78d1cb17", "rot": 29, "bit": 27, "mask": 16}, - {"i": 171, "op": "rotl", "dst": 3, "src": 2, "src2": 0, "imm": "0x91e2ce96", "imm2": "0xf09c550d", "rot": 3, "bit": 12, "mask": 1}, - {"i": 172, "op": "shfl", "dst": 7, "src": 6, "src2": 2, "imm": "0x54edb75b", "imm2": "0xfa03231c", "rot": 17, "bit": 19, "mask": 2}, - {"i": 173, "op": "add", "dst": 0, "src": 1, "src2": 0, "imm": "0xc53a1209", "imm2": "0xadc930fc", "rot": 30, "bit": 28, "mask": 4}, - {"i": 174, "op": "mul", "dst": 0, "src": 6, "src2": 7, "imm": "0xf9b378dc", "imm2": "0x30dbe02d", "rot": 3, "bit": 4, "mask": 4}, - {"i": 175, "op": "mulhi", "dst": 7, "src": 0, "src2": 2, "imm": "0x68fff9f9", "imm2": "0x3601d87b", "rot": 10, "bit": 22, "mask": 4}, - {"i": 176, "op": "or", "dst": 3, "src": 2, "src2": 3, "imm": "0xbb7b99c3", "imm2": "0x3265e3b7", "rot": 30, "bit": 7, "mask": 8}, - {"i": 177, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x2def94b8", "imm2": "0x36cdb68e", "rot": 22, "bit": 16, "mask": 16}, - {"i": 178, "op": "xor", "dst": 6, "src": 2, "src2": 0, "imm": "0xefbbad1b", "imm2": "0x25c1f3a3", "rot": 23, "bit": 27, "mask": 8}, - {"i": 179, "op": "rotl", "dst": 0, "src": 6, "src2": 2, "imm": "0xdfb91641", "imm2": "0x5fa6bd10", "rot": 16, "bit": 1, "mask": 2}, - {"i": 180, "op": "add", "dst": 4, "src": 3, "src2": 1, "imm": "0x774065ef", "imm2": "0x230f4372", "rot": 30, "bit": 5, "mask": 1}, - {"i": 181, "op": "mad", "dst": 6, "src": 2, "src2": 2, "imm": "0xbb3ff351", "imm2": "0x44f03bbd", "rot": 28, "bit": 21, "mask": 2}, - {"i": 182, "op": "add", "dst": 4, "src": 5, "src2": 1, "imm": "0x8c37e75b", "imm2": "0xbc379c7c", "rot": 20, "bit": 18, "mask": 16}, - {"i": 183, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x2ee09a64", "imm2": "0x468c0302", "rot": 26, "bit": 2, "mask": 8}, - {"i": 184, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0x9655a84b", "imm2": "0x0817cb5e", "rot": 22, "bit": 27, "mask": 16}, - {"i": 185, "op": "mul", "dst": 0, "src": 2, "src2": 0, "imm": "0xe241b075", "imm2": "0xe98e01d7", "rot": 21, "bit": 29, "mask": 2}, - {"i": 186, "op": "or", "dst": 3, "src": 5, "src2": 3, "imm": "0xd4d1c421", "imm2": "0x79996af4", "rot": 31, "bit": 15, "mask": 1}, - {"i": 187, "op": "mulhi", "dst": 1, "src": 0, "src2": 1, "imm": "0xcb599916", "imm2": "0x0b601133", "rot": 11, "bit": 1, "mask": 1}, - {"i": 188, "op": "shfl", "dst": 4, "src": 2, "src2": 3, "imm": "0xf0914c47", "imm2": "0x8be15ab4", "rot": 30, "bit": 14, "mask": 16}, - {"i": 189, "op": "rotr", "dst": 5, "src": 4, "src2": 4, "imm": "0xad7e0550", "imm2": "0x01a2ab62", "rot": 27, "bit": 23, "mask": 2}, - {"i": 190, "op": "mad", "dst": 3, "src": 0, "src2": 3, "imm": "0x8472ae31", "imm2": "0xd19d0a54", "rot": 14, "bit": 9, "mask": 1}, - {"i": 191, "op": "or", "dst": 1, "src": 7, "src2": 1, "imm": "0x4021a813", "imm2": "0x1cf8bf72", "rot": 26, "bit": 11, "mask": 8}, - {"i": 192, "op": "or", "dst": 7, "src": 1, "src2": 0, "imm": "0x11da1299", "imm2": "0xf24223a2", "rot": 21, "bit": 29, "mask": 16}, - {"i": 193, "op": "mad", "dst": 1, "src": 5, "src2": 4, "imm": "0x5e8c993c", "imm2": "0x1365e732", "rot": 16, "bit": 25, "mask": 16}, - {"i": 194, "op": "sub", "dst": 0, "src": 7, "src2": 3, "imm": "0xff355fe2", "imm2": "0x32c3bf6b", "rot": 22, "bit": 31, "mask": 8}, - {"i": 195, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x2f8a59ee", "imm2": "0x8751e547", "rot": 25, "bit": 9, "mask": 4}, - {"i": 196, "op": "rotl", "dst": 0, "src": 5, "src2": 6, "imm": "0x3daaadbb", "imm2": "0x3e8cc3ef", "rot": 8, "bit": 22, "mask": 1}, - {"i": 197, "op": "add", "dst": 3, "src": 4, "src2": 1, "imm": "0x0f369a86", "imm2": "0x02b9bb4c", "rot": 5, "bit": 2, "mask": 8}, - {"i": 198, "op": "add", "dst": 4, "src": 2, "src2": 0, "imm": "0xe7922061", "imm2": "0x74240d4c", "rot": 18, "bit": 11, "mask": 2}, - {"i": 199, "op": "mul", "dst": 2, "src": 5, "src2": 7, "imm": "0x139bf0ad", "imm2": "0xfa52e82c", "rot": 13, "bit": 26, "mask": 4}, - {"i": 200, "op": "add", "dst": 6, "src": 7, "src2": 2, "imm": "0xee0e3356", "imm2": "0x7649c3c3", "rot": 18, "bit": 16, "mask": 1}, - {"i": 201, "op": "shfl", "dst": 6, "src": 1, "src2": 1, "imm": "0x53178e6a", "imm2": "0x9432bffa", "rot": 5, "bit": 18, "mask": 16}, - {"i": 202, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0x0b3407f9", "imm2": "0x4cb9e4c3", "rot": 7, "bit": 9, "mask": 1}, - {"i": 203, "op": "shfl", "dst": 3, "src": 2, "src2": 7, "imm": "0xf2b2955e", "imm2": "0xa945ac34", "rot": 1, "bit": 14, "mask": 1}, - {"i": 204, "op": "mad", "dst": 7, "src": 2, "src2": 1, "imm": "0x89b40586", "imm2": "0x41af34d6", "rot": 21, "bit": 29, "mask": 4}, - {"i": 205, "op": "rotl", "dst": 2, "src": 6, "src2": 4, "imm": "0x5030ec54", "imm2": "0xd7e914a1", "rot": 5, "bit": 8, "mask": 4}, - {"i": 206, "op": "shfl", "dst": 7, "src": 1, "src2": 4, "imm": "0x0bd819a9", "imm2": "0xd50608e6", "rot": 1, "bit": 31, "mask": 8}, - {"i": 207, "op": "mul", "dst": 7, "src": 2, "src2": 7, "imm": "0xd5618c2e", "imm2": "0xf83c5e21", "rot": 3, "bit": 7, "mask": 4}, - {"i": 208, "op": "mul", "dst": 0, "src": 3, "src2": 6, "imm": "0xfd8c61ab", "imm2": "0xa9a5ed92", "rot": 31, "bit": 25, "mask": 16}, - {"i": 209, "op": "rotl", "dst": 1, "src": 2, "src2": 6, "imm": "0x30870d28", "imm2": "0xcf010462", "rot": 7, "bit": 7, "mask": 2}, - {"i": 210, "op": "add", "dst": 5, "src": 3, "src2": 2, "imm": "0xc8db10a0", "imm2": "0x3d8f8187", "rot": 11, "bit": 23, "mask": 8}, - {"i": 211, "op": "sub", "dst": 5, "src": 0, "src2": 1, "imm": "0x4cfd08ce", "imm2": "0xdb87006a", "rot": 18, "bit": 6, "mask": 4}, - {"i": 212, "op": "rotr", "dst": 0, "src": 7, "src2": 3, "imm": "0x48870bce", "imm2": "0xc75cb916", "rot": 9, "bit": 16, "mask": 4}, - {"i": 213, "op": "shfl", "dst": 4, "src": 2, "src2": 6, "imm": "0x72ec68cb", "imm2": "0xb4b178ce", "rot": 30, "bit": 25, "mask": 8}, - {"i": 214, "op": "xor", "dst": 1, "src": 3, "src2": 3, "imm": "0x88c9304d", "imm2": "0x4a9d03ce", "rot": 8, "bit": 22, "mask": 1}, - {"i": 215, "op": "rotl", "dst": 1, "src": 3, "src2": 6, "imm": "0xa31f4565", "imm2": "0x46231de4", "rot": 19, "bit": 29, "mask": 1}, - {"i": 216, "op": "shfl", "dst": 6, "src": 3, "src2": 3, "imm": "0x5a2484ee", "imm2": "0x5b9cb817", "rot": 29, "bit": 15, "mask": 2}, - {"i": 217, "op": "mulhi", "dst": 2, "src": 5, "src2": 0, "imm": "0x07b37c31", "imm2": "0xfa99004c", "rot": 3, "bit": 2, "mask": 2}, - {"i": 218, "op": "rotl", "dst": 5, "src": 3, "src2": 4, "imm": "0xa179efbd", "imm2": "0xb61b2b7e", "rot": 14, "bit": 22, "mask": 8}, - {"i": 219, "op": "shfl", "dst": 2, "src": 1, "src2": 6, "imm": "0x91e7f8b0", "imm2": "0x3a4b0b31", "rot": 28, "bit": 9, "mask": 8}, - {"i": 220, "op": "sub", "dst": 7, "src": 5, "src2": 5, "imm": "0xab7ddfe6", "imm2": "0x445f0984", "rot": 17, "bit": 17, "mask": 8}, - {"i": 221, "op": "mulhi", "dst": 3, "src": 6, "src2": 0, "imm": "0x85f16061", "imm2": "0x5c825aaa", "rot": 21, "bit": 1, "mask": 2}, - {"i": 222, "op": "or", "dst": 7, "src": 1, "src2": 1, "imm": "0xb09fbd8c", "imm2": "0x8efb07ba", "rot": 4, "bit": 10, "mask": 16}, - {"i": 223, "op": "mulhi", "dst": 1, "src": 5, "src2": 0, "imm": "0x6ca811d6", "imm2": "0x5b9bdc07", "rot": 10, "bit": 18, "mask": 2}, - {"i": 224, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0x689cdcf5", "imm2": "0xd5a3fb54", "rot": 21, "bit": 24, "mask": 4}, - {"i": 225, "op": "shfl", "dst": 5, "src": 7, "src2": 0, "imm": "0x394093f4", "imm2": "0x8f00ab86", "rot": 9, "bit": 20, "mask": 16}, - {"i": 226, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0xdb937851", "imm2": "0xde20a3b4", "rot": 11, "bit": 29, "mask": 1}, - {"i": 227, "op": "xor", "dst": 0, "src": 2, "src2": 4, "imm": "0xc59c1538", "imm2": "0x4c287438", "rot": 14, "bit": 29, "mask": 4}, - {"i": 228, "op": "add", "dst": 7, "src": 4, "src2": 0, "imm": "0x267f928d", "imm2": "0xba3b9728", "rot": 20, "bit": 8, "mask": 4}, - {"i": 229, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0x4242df07", "imm2": "0xe9f4f5bc", "rot": 2, "bit": 12, "mask": 2}, - {"i": 230, "op": "sub", "dst": 4, "src": 6, "src2": 1, "imm": "0xd873d778", "imm2": "0xd69c88f9", "rot": 19, "bit": 29, "mask": 2}, - {"i": 231, "op": "or", "dst": 0, "src": 1, "src2": 6, "imm": "0x244f872e", "imm2": "0x4748e4c2", "rot": 22, "bit": 27, "mask": 1}, - {"i": 232, "op": "rotl", "dst": 2, "src": 7, "src2": 1, "imm": "0x631b063b", "imm2": "0xe4162bdc", "rot": 10, "bit": 16, "mask": 2}, - {"i": 233, "op": "mul", "dst": 4, "src": 7, "src2": 0, "imm": "0x0f73935d", "imm2": "0x9ecb95a8", "rot": 15, "bit": 25, "mask": 1}, - {"i": 234, "op": "mad", "dst": 6, "src": 0, "src2": 0, "imm": "0x0c265371", "imm2": "0x11f4ed05", "rot": 24, "bit": 21, "mask": 2}, - {"i": 235, "op": "rotl", "dst": 4, "src": 5, "src2": 6, "imm": "0x2307926c", "imm2": "0xd871d381", "rot": 29, "bit": 20, "mask": 1}, - {"i": 236, "op": "add", "dst": 7, "src": 2, "src2": 6, "imm": "0xed6dd62a", "imm2": "0xa437db0e", "rot": 8, "bit": 13, "mask": 1}, - {"i": 237, "op": "rotr", "dst": 4, "src": 7, "src2": 4, "imm": "0x7f7b1ea5", "imm2": "0x0c9f29bb", "rot": 12, "bit": 14, "mask": 4}, - {"i": 238, "op": "add", "dst": 2, "src": 0, "src2": 4, "imm": "0x9f612006", "imm2": "0x1c000e82", "rot": 25, "bit": 17, "mask": 2}, - {"i": 239, "op": "mulhi", "dst": 7, "src": 5, "src2": 0, "imm": "0xaf194815", "imm2": "0xa0840e26", "rot": 12, "bit": 1, "mask": 1}, - {"i": 240, "op": "mulhi", "dst": 3, "src": 6, "src2": 3, "imm": "0x2e7121ba", "imm2": "0xfb8def27", "rot": 9, "bit": 25, "mask": 8}, - {"i": 241, "op": "xor", "dst": 0, "src": 7, "src2": 3, "imm": "0x66f9e726", "imm2": "0x4055a2dc", "rot": 26, "bit": 20, "mask": 8}, - {"i": 242, "op": "rotl", "dst": 4, "src": 1, "src2": 6, "imm": "0x0c1a2c3f", "imm2": "0x17f95fa5", "rot": 11, "bit": 13, "mask": 4}, - {"i": 243, "op": "rotl", "dst": 3, "src": 6, "src2": 1, "imm": "0xc53f813d", "imm2": "0x2d5ee0d7", "rot": 21, "bit": 5, "mask": 1}, - {"i": 244, "op": "add", "dst": 4, "src": 2, "src2": 6, "imm": "0x83ba196c", "imm2": "0x12705678", "rot": 2, "bit": 13, "mask": 16}, - {"i": 245, "op": "add", "dst": 7, "src": 5, "src2": 2, "imm": "0xa5d39c13", "imm2": "0xea712528", "rot": 19, "bit": 2, "mask": 2}, - {"i": 246, "op": "mul", "dst": 0, "src": 5, "src2": 5, "imm": "0x010aaff4", "imm2": "0x3d651c33", "rot": 24, "bit": 8, "mask": 1}, - {"i": 247, "op": "shfl", "dst": 4, "src": 0, "src2": 0, "imm": "0xb42b49ac", "imm2": "0xd97cc75e", "rot": 15, "bit": 22, "mask": 2}, - {"i": 248, "op": "xor", "dst": 3, "src": 2, "src2": 1, "imm": "0x6d42358f", "imm2": "0x410d9e78", "rot": 8, "bit": 3, "mask": 2}, - {"i": 249, "op": "shfl", "dst": 7, "src": 3, "src2": 6, "imm": "0x80d6cb0d", "imm2": "0x7d45237a", "rot": 20, "bit": 31, "mask": 4}, - {"i": 250, "op": "shfl", "dst": 5, "src": 3, "src2": 1, "imm": "0xed61f3bc", "imm2": "0xa9a32779", "rot": 15, "bit": 21, "mask": 16}, - {"i": 251, "op": "add", "dst": 5, "src": 3, "src2": 0, "imm": "0x3006c6eb", "imm2": "0x26ce965f", "rot": 18, "bit": 21, "mask": 2}, - {"i": 252, "op": "rotl", "dst": 3, "src": 7, "src2": 1, "imm": "0x5de2de20", "imm2": "0x5faffc25", "rot": 1, "bit": 6, "mask": 16}, - {"i": 253, "op": "mulhi", "dst": 7, "src": 1, "src2": 1, "imm": "0x3bdc77ee", "imm2": "0x4a432983", "rot": 3, "bit": 20, "mask": 8}, - {"i": 254, "op": "add", "dst": 1, "src": 5, "src2": 4, "imm": "0xc2f46c6d", "imm2": "0x9e34c13f", "rot": 10, "bit": 1, "mask": 8}, - {"i": 255, "op": "rotr", "dst": 4, "src": 7, "src2": 6, "imm": "0xde1cdb62", "imm2": "0xeb3894ba", "rot": 16, "bit": 15, "mask": 2} + "shadow": {"instrs": 256, "reps": 27, "instrs_per_hash": 55296, "op_mix": {"add": 45, "xor": 39, "mad": 29, "mul": 25, "rotl": 23, "sub": 23, "shfl": 22, "rotr": 18, "mulhi": 16, "or": 16}, "rule": "Counter ASIC 3.0 item 8 (docs/analysis/latency-shadow-2026-10-06.md): after the 64 base instructions the program stream draws instrs more ALU instructions (the non-load table, nine draws each, the source as on an ALU slot); the block runs reps times at the end of every iteration with the iteration's sel; the acceptance rule interprets the base program only", "program_id_suffix": "'shadow/' || instrs_le16 || reps_le16", "instructions": [ + {"i": 0, "op": "or", "dst": 4, "src": 1, "src2": 0, "imm": "0x309ef277", "imm2": "0x42f2da2f", "rot": 17, "bit": 0, "mask": 1}, + {"i": 1, "op": "mad", "dst": 0, "src": 2, "src2": 0, "imm": "0x5b458b0d", "imm2": "0x79b53cb6", "rot": 12, "bit": 31, "mask": 16}, + {"i": 2, "op": "sub", "dst": 0, "src": 6, "src2": 3, "imm": "0xd0f04763", "imm2": "0x9d97a503", "rot": 17, "bit": 1, "mask": 2}, + {"i": 3, "op": "or", "dst": 2, "src": 1, "src2": 4, "imm": "0xba74c91c", "imm2": "0x4e51c78f", "rot": 7, "bit": 6, "mask": 4}, + {"i": 4, "op": "add", "dst": 2, "src": 1, "src2": 1, "imm": "0x7281530e", "imm2": "0x12eb25c3", "rot": 13, "bit": 16, "mask": 2}, + {"i": 5, "op": "shfl", "dst": 1, "src": 5, "src2": 0, "imm": "0x87328994", "imm2": "0x8007d065", "rot": 26, "bit": 5, "mask": 1}, + {"i": 6, "op": "rotl", "dst": 5, "src": 1, "src2": 6, "imm": "0x8e053474", "imm2": "0xd25590dd", "rot": 19, "bit": 3, "mask": 16}, + {"i": 7, "op": "rotl", "dst": 6, "src": 0, "src2": 6, "imm": "0x7ce18ede", "imm2": "0xcf63a771", "rot": 1, "bit": 10, "mask": 16}, + {"i": 8, "op": "mad", "dst": 5, "src": 3, "src2": 4, "imm": "0xb7e49776", "imm2": "0x5ea94338", "rot": 10, "bit": 13, "mask": 16}, + {"i": 9, "op": "mad", "dst": 1, "src": 7, "src2": 3, "imm": "0x7986b8d8", "imm2": "0x8011f474", "rot": 21, "bit": 24, "mask": 4}, + {"i": 10, "op": "add", "dst": 5, "src": 0, "src2": 6, "imm": "0xd4a7ed9e", "imm2": "0x47f0ce9f", "rot": 11, "bit": 2, "mask": 4}, + {"i": 11, "op": "shfl", "dst": 2, "src": 3, "src2": 0, "imm": "0x492ee2fb", "imm2": "0xf87ca180", "rot": 1, "bit": 11, "mask": 8}, + {"i": 12, "op": "mad", "dst": 5, "src": 3, "src2": 2, "imm": "0x023a9e11", "imm2": "0x45ac6aad", "rot": 11, "bit": 20, "mask": 8}, + {"i": 13, "op": "add", "dst": 3, "src": 0, "src2": 1, "imm": "0x80b09095", "imm2": "0x39d16785", "rot": 24, "bit": 17, "mask": 16}, + {"i": 14, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x12ab5989", "imm2": "0x670f2ad4", "rot": 3, "bit": 19, "mask": 1}, + {"i": 15, "op": "add", "dst": 0, "src": 1, "src2": 6, "imm": "0xdea5ac3f", "imm2": "0xdca22ff9", "rot": 6, "bit": 29, "mask": 16}, + {"i": 16, "op": "mul", "dst": 5, "src": 7, "src2": 4, "imm": "0xf9eb9361", "imm2": "0xdba72c8a", "rot": 9, "bit": 15, "mask": 2}, + {"i": 17, "op": "sub", "dst": 3, "src": 1, "src2": 5, "imm": "0xef8a836d", "imm2": "0x69726f7d", "rot": 5, "bit": 22, "mask": 16}, + {"i": 18, "op": "shfl", "dst": 1, "src": 0, "src2": 6, "imm": "0xa651d104", "imm2": "0x45731ef2", "rot": 15, "bit": 19, "mask": 4}, + {"i": 19, "op": "rotl", "dst": 0, "src": 4, "src2": 0, "imm": "0x4b1f398c", "imm2": "0x6282aa69", "rot": 26, "bit": 30, "mask": 16}, + {"i": 20, "op": "mulhi", "dst": 7, "src": 1, "src2": 3, "imm": "0xbc190704", "imm2": "0x73e35606", "rot": 28, "bit": 26, "mask": 16}, + {"i": 21, "op": "mul", "dst": 7, "src": 1, "src2": 5, "imm": "0xd4a9b312", "imm2": "0x449683be", "rot": 31, "bit": 18, "mask": 1}, + {"i": 22, "op": "xor", "dst": 0, "src": 4, "src2": 2, "imm": "0x9c9c2860", "imm2": "0xa96c01fc", "rot": 21, "bit": 16, "mask": 4}, + {"i": 23, "op": "mulhi", "dst": 5, "src": 7, "src2": 2, "imm": "0x5b6c758d", "imm2": "0xb7cc5102", "rot": 21, "bit": 8, "mask": 8}, + {"i": 24, "op": "rotl", "dst": 0, "src": 6, "src2": 0, "imm": "0x40d706fe", "imm2": "0xae08c01f", "rot": 5, "bit": 27, "mask": 16}, + {"i": 25, "op": "rotr", "dst": 1, "src": 3, "src2": 7, "imm": "0x4652eb38", "imm2": "0x94571cbf", "rot": 2, "bit": 11, "mask": 1}, + {"i": 26, "op": "mul", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dce6c9d", "imm2": "0x2a07acab", "rot": 12, "bit": 11, "mask": 2}, + {"i": 27, "op": "rotr", "dst": 2, "src": 3, "src2": 5, "imm": "0x692fe409", "imm2": "0xa18b4818", "rot": 1, "bit": 16, "mask": 2}, + {"i": 28, "op": "add", "dst": 6, "src": 2, "src2": 2, "imm": "0xd4145381", "imm2": "0xf7b2ae68", "rot": 26, "bit": 8, "mask": 16}, + {"i": 29, "op": "or", "dst": 1, "src": 0, "src2": 5, "imm": "0xa0f7d359", "imm2": "0x0d15a2e1", "rot": 24, "bit": 3, "mask": 1}, + {"i": 30, "op": "sub", "dst": 1, "src": 5, "src2": 4, "imm": "0x92998a02", "imm2": "0xd62b9224", "rot": 17, "bit": 14, "mask": 16}, + {"i": 31, "op": "rotr", "dst": 5, "src": 4, "src2": 1, "imm": "0x785f7b95", "imm2": "0xa0d323a8", "rot": 20, "bit": 4, "mask": 8}, + {"i": 32, "op": "shfl", "dst": 4, "src": 7, "src2": 3, "imm": "0x0b4c99c3", "imm2": "0xf04f7f13", "rot": 8, "bit": 25, "mask": 8}, + {"i": 33, "op": "or", "dst": 1, "src": 3, "src2": 0, "imm": "0xebaca5cc", "imm2": "0x05418209", "rot": 10, "bit": 15, "mask": 1}, + {"i": 34, "op": "rotl", "dst": 0, "src": 7, "src2": 2, "imm": "0x8948a9b4", "imm2": "0x626acaa6", "rot": 7, "bit": 8, "mask": 16}, + {"i": 35, "op": "rotl", "dst": 5, "src": 2, "src2": 2, "imm": "0xef0e5da9", "imm2": "0xc2aa3df3", "rot": 29, "bit": 1, "mask": 1}, + {"i": 36, "op": "xor", "dst": 7, "src": 6, "src2": 3, "imm": "0x95eb29c3", "imm2": "0xdcee5054", "rot": 3, "bit": 9, "mask": 4}, + {"i": 37, "op": "rotr", "dst": 3, "src": 2, "src2": 5, "imm": "0x62f8e91d", "imm2": "0xef78b877", "rot": 15, "bit": 10, "mask": 4}, + {"i": 38, "op": "xor", "dst": 5, "src": 7, "src2": 6, "imm": "0x537bfe50", "imm2": "0xfea7d317", "rot": 12, "bit": 13, "mask": 8}, + {"i": 39, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0x4431f00f", "imm2": "0xf4af2f49", "rot": 2, "bit": 16, "mask": 4}, + {"i": 40, "op": "xor", "dst": 0, "src": 6, "src2": 2, "imm": "0x0c298d0d", "imm2": "0xe93f28f5", "rot": 2, "bit": 18, "mask": 16}, + {"i": 41, "op": "mul", "dst": 4, "src": 2, "src2": 7, "imm": "0xc5398e82", "imm2": "0x219d5619", "rot": 27, "bit": 17, "mask": 4}, + {"i": 42, "op": "sub", "dst": 1, "src": 7, "src2": 5, "imm": "0x82b8b192", "imm2": "0x898043a3", "rot": 2, "bit": 6, "mask": 2}, + {"i": 43, "op": "add", "dst": 1, "src": 4, "src2": 4, "imm": "0x3c843ffe", "imm2": "0x08943973", "rot": 4, "bit": 23, "mask": 8}, + {"i": 44, "op": "or", "dst": 3, "src": 1, "src2": 0, "imm": "0xa47d850a", "imm2": "0x7c95c5bc", "rot": 18, "bit": 0, "mask": 1}, + {"i": 45, "op": "mul", "dst": 4, "src": 0, "src2": 3, "imm": "0x2981616d", "imm2": "0x55c6f770", "rot": 11, "bit": 31, "mask": 8}, + {"i": 46, "op": "xor", "dst": 0, "src": 4, "src2": 7, "imm": "0x29ced7d0", "imm2": "0xd3055f5a", "rot": 19, "bit": 21, "mask": 2}, + {"i": 47, "op": "mulhi", "dst": 2, "src": 0, "src2": 2, "imm": "0xafc83709", "imm2": "0xb2281314", "rot": 31, "bit": 1, "mask": 16}, + {"i": 48, "op": "sub", "dst": 1, "src": 0, "src2": 7, "imm": "0x5d75fa3c", "imm2": "0x35e125e7", "rot": 8, "bit": 16, "mask": 1}, + {"i": 49, "op": "xor", "dst": 1, "src": 4, "src2": 5, "imm": "0xdb3be989", "imm2": "0x620505ac", "rot": 5, "bit": 25, "mask": 16}, + {"i": 50, "op": "mulhi", "dst": 6, "src": 4, "src2": 6, "imm": "0x26101cc8", "imm2": "0x59419247", "rot": 29, "bit": 6, "mask": 4}, + {"i": 51, "op": "add", "dst": 4, "src": 2, "src2": 7, "imm": "0x3725676a", "imm2": "0xaeef7b36", "rot": 21, "bit": 25, "mask": 8}, + {"i": 52, "op": "xor", "dst": 0, "src": 2, "src2": 0, "imm": "0x6bbf6a74", "imm2": "0xe716d9b3", "rot": 3, "bit": 27, "mask": 4}, + {"i": 53, "op": "shfl", "dst": 7, "src": 6, "src2": 3, "imm": "0x23f75cda", "imm2": "0xe2b24d2d", "rot": 16, "bit": 20, "mask": 2}, + {"i": 54, "op": "mad", "dst": 1, "src": 5, "src2": 1, "imm": "0xe9729dbf", "imm2": "0x4b191a83", "rot": 24, "bit": 19, "mask": 8}, + {"i": 55, "op": "add", "dst": 5, "src": 3, "src2": 1, "imm": "0x41cd8f60", "imm2": "0xd4d858e5", "rot": 23, "bit": 13, "mask": 2}, + {"i": 56, "op": "sub", "dst": 2, "src": 1, "src2": 7, "imm": "0xbbf66283", "imm2": "0xc72caf4a", "rot": 29, "bit": 25, "mask": 8}, + {"i": 57, "op": "add", "dst": 7, "src": 3, "src2": 6, "imm": "0x8f5932f9", "imm2": "0xfa91d5a6", "rot": 11, "bit": 6, "mask": 16}, + {"i": 58, "op": "add", "dst": 3, "src": 7, "src2": 7, "imm": "0xe7f14444", "imm2": "0x970ece18", "rot": 13, "bit": 8, "mask": 4}, + {"i": 59, "op": "mad", "dst": 2, "src": 4, "src2": 7, "imm": "0xadfcd9d8", "imm2": "0x9dce4791", "rot": 21, "bit": 28, "mask": 1}, + {"i": 60, "op": "mad", "dst": 5, "src": 1, "src2": 7, "imm": "0x1ef103e4", "imm2": "0x9e65277f", "rot": 22, "bit": 25, "mask": 8}, + {"i": 61, "op": "add", "dst": 3, "src": 6, "src2": 4, "imm": "0x7c44e743", "imm2": "0xd55319eb", "rot": 19, "bit": 27, "mask": 16}, + {"i": 62, "op": "mad", "dst": 0, "src": 6, "src2": 5, "imm": "0x16a90fed", "imm2": "0xfa7ba641", "rot": 10, "bit": 22, "mask": 1}, + {"i": 63, "op": "or", "dst": 6, "src": 0, "src2": 0, "imm": "0xb071d15e", "imm2": "0x47c17341", "rot": 13, "bit": 22, "mask": 16}, + {"i": 64, "op": "add", "dst": 5, "src": 7, "src2": 6, "imm": "0x811bed22", "imm2": "0x542db8e4", "rot": 4, "bit": 16, "mask": 4}, + {"i": 65, "op": "mul", "dst": 4, "src": 2, "src2": 5, "imm": "0x7c0fda82", "imm2": "0xaf7e882b", "rot": 4, "bit": 18, "mask": 8}, + {"i": 66, "op": "add", "dst": 4, "src": 1, "src2": 5, "imm": "0x6a3a9047", "imm2": "0x33eeb746", "rot": 21, "bit": 24, "mask": 2}, + {"i": 67, "op": "add", "dst": 7, "src": 4, "src2": 7, "imm": "0x4e0c939d", "imm2": "0x27aae05f", "rot": 22, "bit": 22, "mask": 2}, + {"i": 68, "op": "xor", "dst": 1, "src": 2, "src2": 5, "imm": "0x8b0fac0e", "imm2": "0x773d591e", "rot": 25, "bit": 21, "mask": 16}, + {"i": 69, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0x769b5174", "imm2": "0x0e211a1a", "rot": 14, "bit": 2, "mask": 4}, + {"i": 70, "op": "sub", "dst": 4, "src": 2, "src2": 0, "imm": "0x048c0c73", "imm2": "0xeae95d39", "rot": 10, "bit": 9, "mask": 2}, + {"i": 71, "op": "add", "dst": 7, "src": 5, "src2": 6, "imm": "0x44e0e964", "imm2": "0x9e39c430", "rot": 15, "bit": 2, "mask": 4}, + {"i": 72, "op": "mulhi", "dst": 4, "src": 6, "src2": 7, "imm": "0xa6781d34", "imm2": "0x09702575", "rot": 14, "bit": 14, "mask": 1}, + {"i": 73, "op": "sub", "dst": 7, "src": 6, "src2": 6, "imm": "0x67be60ec", "imm2": "0x985d6d54", "rot": 17, "bit": 23, "mask": 16}, + {"i": 74, "op": "mul", "dst": 7, "src": 3, "src2": 4, "imm": "0x1397f8aa", "imm2": "0x8e3d4432", "rot": 24, "bit": 8, "mask": 4}, + {"i": 75, "op": "mad", "dst": 5, "src": 1, "src2": 5, "imm": "0xb0f19594", "imm2": "0x05af0ffb", "rot": 14, "bit": 10, "mask": 1}, + {"i": 76, "op": "sub", "dst": 0, "src": 6, "src2": 1, "imm": "0xbe5f8ad2", "imm2": "0x15cf3077", "rot": 22, "bit": 11, "mask": 2}, + {"i": 77, "op": "mulhi", "dst": 1, "src": 0, "src2": 5, "imm": "0x792ab9fa", "imm2": "0x6ddddf47", "rot": 13, "bit": 21, "mask": 8}, + {"i": 78, "op": "mulhi", "dst": 2, "src": 6, "src2": 7, "imm": "0xfb39e0a1", "imm2": "0xfe045786", "rot": 30, "bit": 1, "mask": 2}, + {"i": 79, "op": "mad", "dst": 7, "src": 6, "src2": 4, "imm": "0xfd22ec62", "imm2": "0x88a6e1eb", "rot": 17, "bit": 8, "mask": 2}, + {"i": 80, "op": "shfl", "dst": 5, "src": 4, "src2": 0, "imm": "0x2959187b", "imm2": "0x0818d2ea", "rot": 17, "bit": 15, "mask": 2}, + {"i": 81, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x75eb3918", "imm2": "0x7b0e8940", "rot": 4, "bit": 21, "mask": 2}, + {"i": 82, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x61f3d247", "imm2": "0xc3a9acb8", "rot": 30, "bit": 21, "mask": 16}, + {"i": 83, "op": "sub", "dst": 3, "src": 5, "src2": 0, "imm": "0x287df7c7", "imm2": "0x873097ac", "rot": 1, "bit": 31, "mask": 2}, + {"i": 84, "op": "shfl", "dst": 2, "src": 3, "src2": 2, "imm": "0x1d855bac", "imm2": "0xc3af60b1", "rot": 8, "bit": 22, "mask": 16}, + {"i": 85, "op": "shfl", "dst": 3, "src": 7, "src2": 5, "imm": "0x1dffd417", "imm2": "0x5eff3b7f", "rot": 10, "bit": 28, "mask": 8}, + {"i": 86, "op": "add", "dst": 1, "src": 5, "src2": 6, "imm": "0x693f4b88", "imm2": "0x8aac6339", "rot": 25, "bit": 29, "mask": 8}, + {"i": 87, "op": "sub", "dst": 1, "src": 2, "src2": 6, "imm": "0xd193f092", "imm2": "0x9f02b743", "rot": 8, "bit": 9, "mask": 8}, + {"i": 88, "op": "rotr", "dst": 7, "src": 4, "src2": 5, "imm": "0xec60ed5d", "imm2": "0xb416e7ca", "rot": 5, "bit": 11, "mask": 1}, + {"i": 89, "op": "shfl", "dst": 4, "src": 7, "src2": 5, "imm": "0x18a30e99", "imm2": "0x72fccf9e", "rot": 11, "bit": 11, "mask": 8}, + {"i": 90, "op": "xor", "dst": 4, "src": 1, "src2": 2, "imm": "0xeb9b94f7", "imm2": "0x64eba514", "rot": 16, "bit": 12, "mask": 2}, + {"i": 91, "op": "shfl", "dst": 1, "src": 3, "src2": 5, "imm": "0xbf6fc372", "imm2": "0xdaad690b", "rot": 17, "bit": 8, "mask": 1}, + {"i": 92, "op": "mul", "dst": 0, "src": 5, "src2": 4, "imm": "0xe44c8e17", "imm2": "0x13c08dc1", "rot": 29, "bit": 0, "mask": 8}, + {"i": 93, "op": "rotr", "dst": 5, "src": 4, "src2": 5, "imm": "0x3da73e17", "imm2": "0x54e1454d", "rot": 22, "bit": 3, "mask": 2}, + {"i": 94, "op": "mulhi", "dst": 0, "src": 3, "src2": 5, "imm": "0xd0464408", "imm2": "0x50a1278c", "rot": 21, "bit": 6, "mask": 2}, + {"i": 95, "op": "rotl", "dst": 2, "src": 6, "src2": 2, "imm": "0xff444229", "imm2": "0x6002eac5", "rot": 5, "bit": 13, "mask": 4}, + {"i": 96, "op": "shfl", "dst": 5, "src": 4, "src2": 7, "imm": "0x4992531a", "imm2": "0x9d44d37c", "rot": 5, "bit": 25, "mask": 4}, + {"i": 97, "op": "shfl", "dst": 6, "src": 5, "src2": 1, "imm": "0xa003998c", "imm2": "0xd1501fac", "rot": 19, "bit": 15, "mask": 1}, + {"i": 98, "op": "rotl", "dst": 6, "src": 5, "src2": 0, "imm": "0xad22bb50", "imm2": "0xb4dd73ca", "rot": 14, "bit": 15, "mask": 4}, + {"i": 99, "op": "sub", "dst": 7, "src": 2, "src2": 4, "imm": "0xbd51e332", "imm2": "0x91444d55", "rot": 21, "bit": 10, "mask": 16}, + {"i": 100, "op": "mad", "dst": 2, "src": 1, "src2": 7, "imm": "0xdcd58135", "imm2": "0x25cf5f5d", "rot": 21, "bit": 29, "mask": 1}, + {"i": 101, "op": "mul", "dst": 3, "src": 0, "src2": 1, "imm": "0x708d8754", "imm2": "0xc3c30426", "rot": 29, "bit": 30, "mask": 4}, + {"i": 102, "op": "mad", "dst": 0, "src": 3, "src2": 5, "imm": "0x9bb09c93", "imm2": "0xdc509217", "rot": 14, "bit": 28, "mask": 8}, + {"i": 103, "op": "add", "dst": 0, "src": 6, "src2": 3, "imm": "0x7c3da932", "imm2": "0x227996ec", "rot": 24, "bit": 23, "mask": 1}, + {"i": 104, "op": "add", "dst": 1, "src": 0, "src2": 2, "imm": "0x7f163b1b", "imm2": "0x924ae879", "rot": 12, "bit": 31, "mask": 4}, + {"i": 105, "op": "rotl", "dst": 3, "src": 4, "src2": 1, "imm": "0xf8e25690", "imm2": "0x8a082e1f", "rot": 8, "bit": 2, "mask": 4}, + {"i": 106, "op": "rotr", "dst": 0, "src": 4, "src2": 4, "imm": "0xceabe7ab", "imm2": "0x3e718566", "rot": 31, "bit": 8, "mask": 4}, + {"i": 107, "op": "mul", "dst": 4, "src": 0, "src2": 1, "imm": "0x96d77e8d", "imm2": "0x1cefd84c", "rot": 9, "bit": 16, "mask": 16}, + {"i": 108, "op": "mad", "dst": 0, "src": 6, "src2": 6, "imm": "0x405dde21", "imm2": "0x8309e55c", "rot": 1, "bit": 4, "mask": 8}, + {"i": 109, "op": "mad", "dst": 0, "src": 3, "src2": 1, "imm": "0xcb99dd37", "imm2": "0xdb0ab009", "rot": 25, "bit": 8, "mask": 16}, + {"i": 110, "op": "rotr", "dst": 7, "src": 4, "src2": 1, "imm": "0x0f08530d", "imm2": "0x5ee7cc2e", "rot": 13, "bit": 27, "mask": 2}, + {"i": 111, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xe38769c5", "imm2": "0x2c60e343", "rot": 18, "bit": 4, "mask": 4}, + {"i": 112, "op": "mul", "dst": 5, "src": 3, "src2": 6, "imm": "0xf819b105", "imm2": "0x56d11b71", "rot": 29, "bit": 3, "mask": 4}, + {"i": 113, "op": "mul", "dst": 2, "src": 7, "src2": 6, "imm": "0x0a1e2492", "imm2": "0xd5511fab", "rot": 30, "bit": 14, "mask": 8}, + {"i": 114, "op": "rotl", "dst": 5, "src": 6, "src2": 7, "imm": "0xbe8aeb22", "imm2": "0x11cd6907", "rot": 16, "bit": 3, "mask": 16}, + {"i": 115, "op": "mulhi", "dst": 6, "src": 2, "src2": 1, "imm": "0x6913ea7d", "imm2": "0x38b2763d", "rot": 27, "bit": 24, "mask": 4}, + {"i": 116, "op": "rotl", "dst": 0, "src": 4, "src2": 6, "imm": "0xcedc4780", "imm2": "0x1b629526", "rot": 5, "bit": 25, "mask": 16}, + {"i": 117, "op": "mul", "dst": 2, "src": 7, "src2": 2, "imm": "0xc2ace26e", "imm2": "0xc3d8443b", "rot": 2, "bit": 14, "mask": 16}, + {"i": 118, "op": "add", "dst": 4, "src": 2, "src2": 3, "imm": "0xa288a176", "imm2": "0x21e83993", "rot": 7, "bit": 15, "mask": 4}, + {"i": 119, "op": "xor", "dst": 1, "src": 0, "src2": 1, "imm": "0xf6bc9d5e", "imm2": "0x3ea2c82b", "rot": 24, "bit": 12, "mask": 16}, + {"i": 120, "op": "rotl", "dst": 2, "src": 3, "src2": 4, "imm": "0x2b0e5270", "imm2": "0xf3c1a703", "rot": 26, "bit": 18, "mask": 8}, + {"i": 121, "op": "add", "dst": 0, "src": 4, "src2": 2, "imm": "0x9df51761", "imm2": "0x0f2327f2", "rot": 5, "bit": 10, "mask": 2}, + {"i": 122, "op": "shfl", "dst": 1, "src": 7, "src2": 6, "imm": "0xeca5e7f0", "imm2": "0x9866610f", "rot": 12, "bit": 20, "mask": 1}, + {"i": 123, "op": "rotr", "dst": 7, "src": 2, "src2": 5, "imm": "0xdfcdcfa4", "imm2": "0x18f15a1e", "rot": 7, "bit": 27, "mask": 16}, + {"i": 124, "op": "add", "dst": 7, "src": 0, "src2": 6, "imm": "0x19c0a4f8", "imm2": "0x2ebd98a2", "rot": 12, "bit": 7, "mask": 4}, + {"i": 125, "op": "mad", "dst": 0, "src": 5, "src2": 3, "imm": "0x9b0adb1b", "imm2": "0x764965b4", "rot": 13, "bit": 22, "mask": 16}, + {"i": 126, "op": "xor", "dst": 0, "src": 4, "src2": 4, "imm": "0x44fe4207", "imm2": "0x910211ba", "rot": 6, "bit": 18, "mask": 1}, + {"i": 127, "op": "shfl", "dst": 1, "src": 4, "src2": 7, "imm": "0x7c5c719d", "imm2": "0x0836b2e8", "rot": 9, "bit": 1, "mask": 16}, + {"i": 128, "op": "rotl", "dst": 5, "src": 6, "src2": 6, "imm": "0x911c0d67", "imm2": "0xa2ba5a19", "rot": 21, "bit": 18, "mask": 4}, + {"i": 129, "op": "sub", "dst": 4, "src": 0, "src2": 3, "imm": "0x5cab59d0", "imm2": "0xafccab62", "rot": 3, "bit": 26, "mask": 16}, + {"i": 130, "op": "xor", "dst": 5, "src": 0, "src2": 3, "imm": "0xba638107", "imm2": "0x5db38333", "rot": 18, "bit": 9, "mask": 2}, + {"i": 131, "op": "mad", "dst": 7, "src": 6, "src2": 3, "imm": "0x6d0aef48", "imm2": "0x6143bc91", "rot": 14, "bit": 22, "mask": 16}, + {"i": 132, "op": "mad", "dst": 5, "src": 6, "src2": 6, "imm": "0xec82154f", "imm2": "0x876fe9ca", "rot": 16, "bit": 14, "mask": 2}, + {"i": 133, "op": "xor", "dst": 6, "src": 2, "src2": 7, "imm": "0x443c2a5f", "imm2": "0xfdb393d3", "rot": 31, "bit": 21, "mask": 2}, + {"i": 134, "op": "mulhi", "dst": 6, "src": 5, "src2": 3, "imm": "0x89854adb", "imm2": "0x458d5e5e", "rot": 20, "bit": 27, "mask": 8}, + {"i": 135, "op": "add", "dst": 5, "src": 4, "src2": 1, "imm": "0xd49ef2cf", "imm2": "0x70024b77", "rot": 8, "bit": 9, "mask": 16}, + {"i": 136, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x34b22f8f", "imm2": "0x7322da82", "rot": 11, "bit": 16, "mask": 1}, + {"i": 137, "op": "add", "dst": 0, "src": 5, "src2": 5, "imm": "0x96954048", "imm2": "0x4c39b70b", "rot": 10, "bit": 3, "mask": 1}, + {"i": 138, "op": "xor", "dst": 2, "src": 4, "src2": 2, "imm": "0x6fc367fe", "imm2": "0xe100aeac", "rot": 5, "bit": 23, "mask": 2}, + {"i": 139, "op": "add", "dst": 4, "src": 0, "src2": 7, "imm": "0x5b35ff4a", "imm2": "0x3c3cdf42", "rot": 4, "bit": 9, "mask": 4}, + {"i": 140, "op": "rotl", "dst": 5, "src": 3, "src2": 1, "imm": "0x80a1f9b7", "imm2": "0x66467acb", "rot": 10, "bit": 25, "mask": 2}, + {"i": 141, "op": "or", "dst": 5, "src": 1, "src2": 5, "imm": "0xda701fe4", "imm2": "0x6644e492", "rot": 9, "bit": 3, "mask": 2}, + {"i": 142, "op": "mul", "dst": 4, "src": 3, "src2": 3, "imm": "0x6f508967", "imm2": "0x4e04d487", "rot": 16, "bit": 4, "mask": 1}, + {"i": 143, "op": "add", "dst": 6, "src": 4, "src2": 3, "imm": "0xc2137621", "imm2": "0x0b3bd787", "rot": 18, "bit": 31, "mask": 2}, + {"i": 144, "op": "xor", "dst": 5, "src": 1, "src2": 0, "imm": "0x76b0b14e", "imm2": "0xe9730f07", "rot": 30, "bit": 16, "mask": 2}, + {"i": 145, "op": "rotl", "dst": 0, "src": 2, "src2": 4, "imm": "0xbcda17de", "imm2": "0x617d63bb", "rot": 27, "bit": 30, "mask": 4}, + {"i": 146, "op": "sub", "dst": 2, "src": 5, "src2": 0, "imm": "0x0e225ff9", "imm2": "0x3536fd38", "rot": 7, "bit": 8, "mask": 4}, + {"i": 147, "op": "rotl", "dst": 2, "src": 1, "src2": 2, "imm": "0x3ba283bc", "imm2": "0x80b8d896", "rot": 21, "bit": 18, "mask": 2}, + {"i": 148, "op": "add", "dst": 0, "src": 1, "src2": 2, "imm": "0xaf6409ea", "imm2": "0x7f3d99bf", "rot": 7, "bit": 28, "mask": 1}, + {"i": 149, "op": "xor", "dst": 6, "src": 5, "src2": 3, "imm": "0x32f83d1b", "imm2": "0x19f0231e", "rot": 13, "bit": 8, "mask": 2}, + {"i": 150, "op": "mul", "dst": 2, "src": 1, "src2": 0, "imm": "0x5d0e1a76", "imm2": "0x331aa008", "rot": 20, "bit": 17, "mask": 8}, + {"i": 151, "op": "mulhi", "dst": 3, "src": 5, "src2": 1, "imm": "0xaf1b7af3", "imm2": "0xa869eb43", "rot": 7, "bit": 18, "mask": 2}, + {"i": 152, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0xc8f4d8ce", "imm2": "0x2782a4e8", "rot": 18, "bit": 6, "mask": 4}, + {"i": 153, "op": "rotl", "dst": 5, "src": 0, "src2": 1, "imm": "0x7550e18a", "imm2": "0xf1c415e8", "rot": 16, "bit": 24, "mask": 16}, + {"i": 154, "op": "mul", "dst": 7, "src": 5, "src2": 1, "imm": "0x84178f98", "imm2": "0xb27cdd09", "rot": 9, "bit": 31, "mask": 2}, + {"i": 155, "op": "mad", "dst": 7, "src": 0, "src2": 5, "imm": "0x091bdf34", "imm2": "0x81aa23ed", "rot": 10, "bit": 26, "mask": 8}, + {"i": 156, "op": "mad", "dst": 3, "src": 7, "src2": 0, "imm": "0x16801f9f", "imm2": "0x2b0550a0", "rot": 25, "bit": 18, "mask": 4}, + {"i": 157, "op": "sub", "dst": 1, "src": 6, "src2": 5, "imm": "0x649e785b", "imm2": "0x958fb4c2", "rot": 8, "bit": 12, "mask": 16}, + {"i": 158, "op": "add", "dst": 3, "src": 4, "src2": 7, "imm": "0xbf35527c", "imm2": "0x084ad732", "rot": 5, "bit": 4, "mask": 8}, + {"i": 159, "op": "or", "dst": 3, "src": 1, "src2": 2, "imm": "0x4ba957fb", "imm2": "0xd86008b5", "rot": 28, "bit": 7, "mask": 2}, + {"i": 160, "op": "xor", "dst": 4, "src": 7, "src2": 6, "imm": "0x82ed8c99", "imm2": "0xb0053a39", "rot": 6, "bit": 9, "mask": 16}, + {"i": 161, "op": "xor", "dst": 5, "src": 4, "src2": 2, "imm": "0x809c8427", "imm2": "0x0195d892", "rot": 2, "bit": 10, "mask": 8}, + {"i": 162, "op": "rotl", "dst": 0, "src": 6, "src2": 1, "imm": "0x85240167", "imm2": "0xa130e24b", "rot": 2, "bit": 9, "mask": 16}, + {"i": 163, "op": "sub", "dst": 1, "src": 4, "src2": 3, "imm": "0x0365853a", "imm2": "0x56084218", "rot": 16, "bit": 25, "mask": 4}, + {"i": 164, "op": "xor", "dst": 3, "src": 6, "src2": 7, "imm": "0xda958a98", "imm2": "0x8ea609ad", "rot": 15, "bit": 8, "mask": 16}, + {"i": 165, "op": "mulhi", "dst": 3, "src": 0, "src2": 2, "imm": "0xdf258d77", "imm2": "0x24da7892", "rot": 23, "bit": 30, "mask": 16}, + {"i": 166, "op": "xor", "dst": 6, "src": 2, "src2": 5, "imm": "0xee1224bb", "imm2": "0xdd8ecf95", "rot": 23, "bit": 21, "mask": 4}, + {"i": 167, "op": "mul", "dst": 6, "src": 0, "src2": 4, "imm": "0x8d7e2d70", "imm2": "0x349d6e9a", "rot": 31, "bit": 7, "mask": 2}, + {"i": 168, "op": "add", "dst": 1, "src": 0, "src2": 4, "imm": "0x4d9683b5", "imm2": "0x9e1aa79b", "rot": 10, "bit": 11, "mask": 8}, + {"i": 169, "op": "mad", "dst": 3, "src": 5, "src2": 1, "imm": "0xf613d3d2", "imm2": "0x7a51238f", "rot": 24, "bit": 14, "mask": 4}, + {"i": 170, "op": "xor", "dst": 2, "src": 3, "src2": 0, "imm": "0x6384ae47", "imm2": "0xf2e6043d", "rot": 7, "bit": 13, "mask": 8}, + {"i": 171, "op": "add", "dst": 0, "src": 7, "src2": 7, "imm": "0xa33023af", "imm2": "0x47f22138", "rot": 19, "bit": 18, "mask": 2}, + {"i": 172, "op": "add", "dst": 3, "src": 4, "src2": 0, "imm": "0xb4c0dd62", "imm2": "0xb4561a0c", "rot": 7, "bit": 17, "mask": 2}, + {"i": 173, "op": "mul", "dst": 3, "src": 0, "src2": 7, "imm": "0x80206dac", "imm2": "0x1b739e4e", "rot": 17, "bit": 31, "mask": 2}, + {"i": 174, "op": "shfl", "dst": 4, "src": 6, "src2": 4, "imm": "0x2ab7e5c1", "imm2": "0x7d88b7c0", "rot": 4, "bit": 5, "mask": 2}, + {"i": 175, "op": "add", "dst": 4, "src": 2, "src2": 2, "imm": "0xc9a1b546", "imm2": "0x50dcdd8d", "rot": 19, "bit": 18, "mask": 2}, + {"i": 176, "op": "add", "dst": 6, "src": 1, "src2": 1, "imm": "0x6d7dd3a8", "imm2": "0xeb88782d", "rot": 9, "bit": 16, "mask": 8}, + {"i": 177, "op": "sub", "dst": 2, "src": 7, "src2": 7, "imm": "0x79d36099", "imm2": "0x076fef7e", "rot": 18, "bit": 21, "mask": 2}, + {"i": 178, "op": "mad", "dst": 0, "src": 2, "src2": 2, "imm": "0x0f6e037d", "imm2": "0x0cc7519f", "rot": 4, "bit": 21, "mask": 2}, + {"i": 179, "op": "mul", "dst": 0, "src": 2, "src2": 6, "imm": "0xbd7faff5", "imm2": "0x0d172bb9", "rot": 30, "bit": 22, "mask": 8}, + {"i": 180, "op": "mad", "dst": 0, "src": 5, "src2": 0, "imm": "0x183d820a", "imm2": "0x5abfbcaf", "rot": 27, "bit": 31, "mask": 1}, + {"i": 181, "op": "sub", "dst": 1, "src": 7, "src2": 1, "imm": "0x3329d975", "imm2": "0x110b1447", "rot": 3, "bit": 14, "mask": 4}, + {"i": 182, "op": "xor", "dst": 6, "src": 4, "src2": 4, "imm": "0x3b9aa754", "imm2": "0xbf7c26a7", "rot": 2, "bit": 1, "mask": 16}, + {"i": 183, "op": "sub", "dst": 6, "src": 1, "src2": 7, "imm": "0x2432ca1b", "imm2": "0x7ece0a60", "rot": 28, "bit": 19, "mask": 16}, + {"i": 184, "op": "mad", "dst": 0, "src": 4, "src2": 2, "imm": "0x358d681c", "imm2": "0x8a61db17", "rot": 5, "bit": 26, "mask": 8}, + {"i": 185, "op": "mulhi", "dst": 2, "src": 7, "src2": 1, "imm": "0xf519acf0", "imm2": "0xce9fb9a5", "rot": 8, "bit": 7, "mask": 2}, + {"i": 186, "op": "xor", "dst": 0, "src": 1, "src2": 6, "imm": "0x91962182", "imm2": "0xd7aab2fd", "rot": 29, "bit": 26, "mask": 1}, + {"i": 187, "op": "add", "dst": 4, "src": 0, "src2": 3, "imm": "0xf5421b9a", "imm2": "0x15f552ef", "rot": 22, "bit": 2, "mask": 16}, + {"i": 188, "op": "mad", "dst": 4, "src": 2, "src2": 5, "imm": "0x3aec1c9f", "imm2": "0x9bc6ab71", "rot": 20, "bit": 13, "mask": 8}, + {"i": 189, "op": "rotr", "dst": 7, "src": 0, "src2": 2, "imm": "0x6f01dad9", "imm2": "0xe10d5b1b", "rot": 30, "bit": 8, "mask": 2}, + {"i": 190, "op": "mul", "dst": 0, "src": 2, "src2": 5, "imm": "0x7ed5bd96", "imm2": "0xee09fd34", "rot": 4, "bit": 23, "mask": 1}, + {"i": 191, "op": "xor", "dst": 0, "src": 2, "src2": 5, "imm": "0xd41b2121", "imm2": "0x92ba8072", "rot": 2, "bit": 31, "mask": 2}, + {"i": 192, "op": "rotr", "dst": 4, "src": 5, "src2": 7, "imm": "0x3885bcc5", "imm2": "0x2e273135", "rot": 30, "bit": 19, "mask": 2}, + {"i": 193, "op": "xor", "dst": 3, "src": 6, "src2": 5, "imm": "0x61790244", "imm2": "0x042ea62c", "rot": 20, "bit": 11, "mask": 4}, + {"i": 194, "op": "or", "dst": 1, "src": 5, "src2": 5, "imm": "0x30c01d95", "imm2": "0x7422c939", "rot": 18, "bit": 0, "mask": 4}, + {"i": 195, "op": "rotr", "dst": 2, "src": 3, "src2": 4, "imm": "0xebf72b21", "imm2": "0x0381141e", "rot": 19, "bit": 26, "mask": 8}, + {"i": 196, "op": "rotl", "dst": 6, "src": 5, "src2": 6, "imm": "0x563e9b37", "imm2": "0x14216046", "rot": 1, "bit": 5, "mask": 8}, + {"i": 197, "op": "rotr", "dst": 3, "src": 6, "src2": 2, "imm": "0x744271a6", "imm2": "0xa69d67c3", "rot": 2, "bit": 27, "mask": 2}, + {"i": 198, "op": "mad", "dst": 7, "src": 3, "src2": 2, "imm": "0xd0d949b1", "imm2": "0x9e319e1f", "rot": 7, "bit": 16, "mask": 4}, + {"i": 199, "op": "sub", "dst": 0, "src": 3, "src2": 2, "imm": "0x4ebd2a38", "imm2": "0x14035142", "rot": 21, "bit": 13, "mask": 4}, + {"i": 200, "op": "xor", "dst": 6, "src": 7, "src2": 5, "imm": "0x578ba981", "imm2": "0xd6a03003", "rot": 18, "bit": 3, "mask": 16}, + {"i": 201, "op": "add", "dst": 1, "src": 3, "src2": 0, "imm": "0x1c29c85b", "imm2": "0xda481a5d", "rot": 1, "bit": 15, "mask": 2}, + {"i": 202, "op": "mul", "dst": 5, "src": 3, "src2": 3, "imm": "0x45a84508", "imm2": "0xaa83380d", "rot": 7, "bit": 16, "mask": 16}, + {"i": 203, "op": "mulhi", "dst": 5, "src": 0, "src2": 0, "imm": "0x16bf1c9b", "imm2": "0x952ac588", "rot": 18, "bit": 13, "mask": 16}, + {"i": 204, "op": "xor", "dst": 5, "src": 3, "src2": 3, "imm": "0xeb5e0608", "imm2": "0x94cd4c1c", "rot": 3, "bit": 31, "mask": 4}, + {"i": 205, "op": "add", "dst": 6, "src": 0, "src2": 5, "imm": "0x7975e016", "imm2": "0xbff40052", "rot": 22, "bit": 15, "mask": 4}, + {"i": 206, "op": "xor", "dst": 7, "src": 1, "src2": 3, "imm": "0xf82a930b", "imm2": "0x2300022d", "rot": 4, "bit": 28, "mask": 8}, + {"i": 207, "op": "xor", "dst": 2, "src": 5, "src2": 2, "imm": "0x8e57d71e", "imm2": "0x5a9652a3", "rot": 30, "bit": 14, "mask": 2}, + {"i": 208, "op": "or", "dst": 4, "src": 2, "src2": 4, "imm": "0xe3548333", "imm2": "0x7a8d6113", "rot": 28, "bit": 22, "mask": 8}, + {"i": 209, "op": "mulhi", "dst": 4, "src": 0, "src2": 0, "imm": "0x902d34f1", "imm2": "0xc651677b", "rot": 17, "bit": 9, "mask": 16}, + {"i": 210, "op": "sub", "dst": 7, "src": 5, "src2": 4, "imm": "0x00293597", "imm2": "0x7fdd9002", "rot": 4, "bit": 2, "mask": 16}, + {"i": 211, "op": "mad", "dst": 7, "src": 4, "src2": 4, "imm": "0xfc26dc73", "imm2": "0x11960e13", "rot": 31, "bit": 30, "mask": 16}, + {"i": 212, "op": "xor", "dst": 0, "src": 3, "src2": 0, "imm": "0x5dbef2f0", "imm2": "0x78801172", "rot": 18, "bit": 16, "mask": 16}, + {"i": 213, "op": "add", "dst": 3, "src": 4, "src2": 5, "imm": "0x57f3f8ac", "imm2": "0xb1f05c54", "rot": 30, "bit": 24, "mask": 2}, + {"i": 214, "op": "rotl", "dst": 2, "src": 3, "src2": 6, "imm": "0x7477d17c", "imm2": "0xe223067d", "rot": 12, "bit": 28, "mask": 1}, + {"i": 215, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x251245fb", "imm2": "0x649b79b3", "rot": 1, "bit": 28, "mask": 8}, + {"i": 216, "op": "rotr", "dst": 1, "src": 4, "src2": 7, "imm": "0xbba7ad37", "imm2": "0x4a7fcefa", "rot": 28, "bit": 12, "mask": 16}, + {"i": 217, "op": "shfl", "dst": 5, "src": 0, "src2": 2, "imm": "0xaca47dfc", "imm2": "0x74c1ac11", "rot": 13, "bit": 7, "mask": 8}, + {"i": 218, "op": "or", "dst": 3, "src": 6, "src2": 6, "imm": "0x9c59393e", "imm2": "0x193e979d", "rot": 26, "bit": 26, "mask": 1}, + {"i": 219, "op": "shfl", "dst": 0, "src": 2, "src2": 6, "imm": "0x551c4394", "imm2": "0x8d686c70", "rot": 16, "bit": 22, "mask": 4}, + {"i": 220, "op": "shfl", "dst": 0, "src": 3, "src2": 2, "imm": "0x6cc31e81", "imm2": "0x67e006db", "rot": 15, "bit": 12, "mask": 1}, + {"i": 221, "op": "or", "dst": 4, "src": 7, "src2": 3, "imm": "0x6d970617", "imm2": "0xd58487b4", "rot": 4, "bit": 22, "mask": 4}, + {"i": 222, "op": "mul", "dst": 6, "src": 5, "src2": 5, "imm": "0x00191e10", "imm2": "0x61f09d5f", "rot": 1, "bit": 3, "mask": 1}, + {"i": 223, "op": "shfl", "dst": 4, "src": 3, "src2": 2, "imm": "0x4e0d090f", "imm2": "0xf3b64877", "rot": 13, "bit": 5, "mask": 8}, + {"i": 224, "op": "add", "dst": 4, "src": 2, "src2": 5, "imm": "0xa0235028", "imm2": "0x1023c67e", "rot": 14, "bit": 3, "mask": 8}, + {"i": 225, "op": "rotl", "dst": 6, "src": 7, "src2": 4, "imm": "0x47b8c775", "imm2": "0xe1d76134", "rot": 10, "bit": 6, "mask": 8}, + {"i": 226, "op": "xor", "dst": 2, "src": 0, "src2": 7, "imm": "0xd73c8bff", "imm2": "0x9f2c531a", "rot": 30, "bit": 29, "mask": 4}, + {"i": 227, "op": "mad", "dst": 1, "src": 0, "src2": 6, "imm": "0x2a892064", "imm2": "0x837a120c", "rot": 26, "bit": 26, "mask": 2}, + {"i": 228, "op": "add", "dst": 2, "src": 0, "src2": 7, "imm": "0xf2e2fbba", "imm2": "0x410d0f7a", "rot": 27, "bit": 17, "mask": 4}, + {"i": 229, "op": "rotr", "dst": 2, "src": 6, "src2": 2, "imm": "0x1abf791e", "imm2": "0x82b7cc9b", "rot": 1, "bit": 11, "mask": 16}, + {"i": 230, "op": "rotr", "dst": 5, "src": 6, "src2": 7, "imm": "0x0ad90e2c", "imm2": "0x5ba71a40", "rot": 21, "bit": 31, "mask": 2}, + {"i": 231, "op": "sub", "dst": 6, "src": 0, "src2": 6, "imm": "0x28ce8553", "imm2": "0x24e7d3e8", "rot": 7, "bit": 8, "mask": 2}, + {"i": 232, "op": "mad", "dst": 5, "src": 7, "src2": 7, "imm": "0x1b029ac3", "imm2": "0xcf50db02", "rot": 7, "bit": 17, "mask": 8}, + {"i": 233, "op": "xor", "dst": 3, "src": 2, "src2": 3, "imm": "0x0aeb3207", "imm2": "0x45b88abf", "rot": 11, "bit": 16, "mask": 1}, + {"i": 234, "op": "xor", "dst": 2, "src": 4, "src2": 4, "imm": "0x800373aa", "imm2": "0xdee8df17", "rot": 22, "bit": 0, "mask": 16}, + {"i": 235, "op": "rotl", "dst": 1, "src": 0, "src2": 2, "imm": "0x4b30059c", "imm2": "0x82bc4b9e", "rot": 4, "bit": 2, "mask": 16}, + {"i": 236, "op": "shfl", "dst": 3, "src": 4, "src2": 5, "imm": "0x86313a60", "imm2": "0xfd859dcd", "rot": 2, "bit": 30, "mask": 4}, + {"i": 237, "op": "xor", "dst": 7, "src": 6, "src2": 4, "imm": "0xad9a2efc", "imm2": "0xfe9f7249", "rot": 27, "bit": 23, "mask": 8}, + {"i": 238, "op": "mul", "dst": 4, "src": 3, "src2": 6, "imm": "0x14391a18", "imm2": "0x12bdc201", "rot": 26, "bit": 16, "mask": 1}, + {"i": 239, "op": "mulhi", "dst": 0, "src": 7, "src2": 0, "imm": "0x6bfc6a9c", "imm2": "0xcfb4e2f8", "rot": 25, "bit": 24, "mask": 1}, + {"i": 240, "op": "xor", "dst": 4, "src": 7, "src2": 3, "imm": "0x91f0a1cf", "imm2": "0xdf1179f9", "rot": 11, "bit": 11, "mask": 2}, + {"i": 241, "op": "add", "dst": 0, "src": 7, "src2": 6, "imm": "0xf495035b", "imm2": "0x90b2f1c9", "rot": 18, "bit": 1, "mask": 1}, + {"i": 242, "op": "add", "dst": 5, "src": 1, "src2": 1, "imm": "0xad76bafb", "imm2": "0x43fe7580", "rot": 13, "bit": 19, "mask": 1}, + {"i": 243, "op": "rotr", "dst": 1, "src": 0, "src2": 1, "imm": "0xa818b272", "imm2": "0x38345c95", "rot": 1, "bit": 26, "mask": 2}, + {"i": 244, "op": "shfl", "dst": 7, "src": 5, "src2": 5, "imm": "0xe6ae11d6", "imm2": "0xf89f284b", "rot": 4, "bit": 28, "mask": 2}, + {"i": 245, "op": "mul", "dst": 4, "src": 5, "src2": 3, "imm": "0xa922f9d8", "imm2": "0x1904fea1", "rot": 8, "bit": 18, "mask": 4}, + {"i": 246, "op": "add", "dst": 6, "src": 5, "src2": 4, "imm": "0x7b0d685d", "imm2": "0xa1eaac90", "rot": 5, "bit": 23, "mask": 1}, + {"i": 247, "op": "mul", "dst": 7, "src": 6, "src2": 3, "imm": "0xbfa01ae5", "imm2": "0x8b3fc07f", "rot": 30, "bit": 3, "mask": 16}, + {"i": 248, "op": "rotl", "dst": 6, "src": 2, "src2": 1, "imm": "0x16ddd145", "imm2": "0x6401a397", "rot": 2, "bit": 23, "mask": 16}, + {"i": 249, "op": "sub", "dst": 2, "src": 6, "src2": 0, "imm": "0x48bbedc8", "imm2": "0xa7eff201", "rot": 22, "bit": 17, "mask": 1}, + {"i": 250, "op": "or", "dst": 4, "src": 2, "src2": 1, "imm": "0x4d28417a", "imm2": "0x597ca0e1", "rot": 20, "bit": 22, "mask": 2}, + {"i": 251, "op": "add", "dst": 2, "src": 1, "src2": 3, "imm": "0x14c6d26a", "imm2": "0xca0faca7", "rot": 3, "bit": 26, "mask": 1}, + {"i": 252, "op": "xor", "dst": 5, "src": 6, "src2": 1, "imm": "0x031babc3", "imm2": "0x24f72c20", "rot": 20, "bit": 3, "mask": 1}, + {"i": 253, "op": "or", "dst": 4, "src": 6, "src2": 3, "imm": "0x8cc4ae2b", "imm2": "0x0d1b6d4b", "rot": 27, "bit": 8, "mask": 8}, + {"i": 254, "op": "add", "dst": 2, "src": 6, "src2": 6, "imm": "0x5c6e41f5", "imm2": "0xf887f9ea", "rot": 7, "bit": 14, "mask": 16}, + {"i": 255, "op": "add", "dst": 7, "src": 6, "src2": 5, "imm": "0x9389bb50", "imm2": "0x1eeb32d4", "rot": 6, "bit": 19, "mask": 2} ]}, "instructions": [ - {"i": 0, "op": "add", "dst": 4, "src": 5, "src2": 7, "imm": "0xea86e152", "imm2": "0x5810667a", "rot": 27, "bit": 13, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 1, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xbaab6229", "imm2": "0xed861989", "rot": 26, "bit": 22, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 2, "op": "shfl", "dst": 3, "src": 6, "src2": 2, "imm": "0x5b623116", "imm2": "0xff12e5b2", "rot": 12, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 3, "op": "sub", "dst": 4, "src": 1, "src2": 1, "imm": "0xe99741c7", "imm2": "0xf5fa5009", "rot": 1, "bit": 21, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 4, "op": "mad", "dst": 2, "src": 0, "src2": 4, "imm": "0x673c2157", "imm2": "0xee02465f", "rot": 20, "bit": 22, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 5, "op": "rotl", "dst": 4, "src": 7, "src2": 7, "imm": "0x946f7818", "imm2": "0x45d3399e", "rot": 9, "bit": 2, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 6, "op": "rotr", "dst": 0, "src": 2, "src2": 4, "imm": "0x5f6a0ed2", "imm2": "0x7043a636", "rot": 19, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 7, "op": "load", "dst": 6, "src": 7, "src2": 1, "imm": "0x5c61dcf7", "imm2": "0x7466aa40", "rot": 19, "bit": 9, "mask": 2, "width": 1, "win": 2, "off": 1}, - {"i": 8, "op": "load", "dst": 1, "src": 4, "src2": 5, "imm": "0x85668475", "imm2": "0xdb8cc483", "rot": 29, "bit": 7, "mask": 4, "width": 1, "win": 1, "off": 1}, - {"i": 9, "op": "load", "dst": 1, "src": 2, "src2": 4, "imm": "0x4454980f", "imm2": "0xebd31581", "rot": 10, "bit": 28, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 10, "op": "load", "dst": 7, "src": 0, "src2": 2, "imm": "0xe075297c", "imm2": "0x5779c44c", "rot": 10, "bit": 22, "mask": 2, "width": 1, "win": 1, "off": 1}, - {"i": 11, "op": "load", "dst": 7, "src": 1, "src2": 6, "imm": "0x65aa4311", "imm2": "0x4fe48ea9", "rot": 15, "bit": 9, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 12, "op": "mul", "dst": 5, "src": 4, "src2": 2, "imm": "0x1383d3ad", "imm2": "0xf3094b29", "rot": 8, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 13, "op": "load", "dst": 7, "src": 6, "src2": 2, "imm": "0xed8a496f", "imm2": "0x3072c3c6", "rot": 28, "bit": 19, "mask": 8, "width": 1, "win": 1, "off": 1}, - {"i": 14, "op": "shfl", "dst": 6, "src": 5, "src2": 0, "imm": "0x8b965b57", "imm2": "0xcfeca6c1", "rot": 12, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 15, "op": "shfl", "dst": 3, "src": 5, "src2": 3, "imm": "0x877c7586", "imm2": "0xa9cb2a03", "rot": 2, "bit": 29, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 16, "op": "or", "dst": 2, "src": 7, "src2": 3, "imm": "0xb740221a", "imm2": "0x89d38d6d", "rot": 6, "bit": 31, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 17, "op": "rotr", "dst": 0, "src": 6, "src2": 1, "imm": "0x26f3ad8a", "imm2": "0x27256f15", "rot": 18, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 18, "op": "add", "dst": 7, "src": 5, "src2": 7, "imm": "0xf66e7017", "imm2": "0xb9e3577e", "rot": 9, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 19, "op": "rotl", "dst": 7, "src": 0, "src2": 5, "imm": "0x849ae6ee", "imm2": "0x02b358f9", "rot": 24, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 20, "op": "add", "dst": 6, "src": 7, "src2": 6, "imm": "0x52334d12", "imm2": "0x8c9f0ef8", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 21, "op": "or", "dst": 2, "src": 6, "src2": 5, "imm": "0xb1871e63", "imm2": "0xb2e40191", "rot": 5, "bit": 13, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 22, "op": "mad", "dst": 6, "src": 5, "src2": 4, "imm": "0x97df29e4", "imm2": "0xe60fea84", "rot": 11, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 23, "op": "or", "dst": 1, "src": 0, "src2": 3, "imm": "0x8f30d21d", "imm2": "0x2df685a0", "rot": 31, "bit": 0, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 24, "op": "xor", "dst": 6, "src": 1, "src2": 2, "imm": "0xd2c4025f", "imm2": "0x5269eb4d", "rot": 31, "bit": 21, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 25, "op": "add", "dst": 2, "src": 6, "src2": 5, "imm": "0x659fc3d3", "imm2": "0x9cec0e12", "rot": 6, "bit": 17, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 26, "op": "rotr", "dst": 7, "src": 0, "src2": 1, "imm": "0xd89ef484", "imm2": "0x20be3846", "rot": 12, "bit": 9, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 27, "op": "mad", "dst": 4, "src": 5, "src2": 7, "imm": "0xb48420ae", "imm2": "0x3d1f2485", "rot": 14, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 28, "op": "mad", "dst": 3, "src": 2, "src2": 4, "imm": "0xc5c46d76", "imm2": "0x700044b5", "rot": 22, "bit": 10, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 29, "op": "load", "dst": 1, "src": 4, "src2": 3, "imm": "0x0fbaf177", "imm2": "0xfff4f2ed", "rot": 20, "bit": 31, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 30, "op": "load", "dst": 2, "src": 3, "src2": 0, "imm": "0xe90eb2e5", "imm2": "0xb0f9eb79", "rot": 27, "bit": 14, "mask": 4, "width": 1, "win": 2, "off": 2}, - {"i": 31, "op": "load", "dst": 1, "src": 5, "src2": 2, "imm": "0x97ba3fc3", "imm2": "0x7894e657", "rot": 3, "bit": 30, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 32, "op": "add", "dst": 7, "src": 2, "src2": 7, "imm": "0x070888a8", "imm2": "0xe403240e", "rot": 2, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 33, "op": "add", "dst": 2, "src": 0, "src2": 5, "imm": "0xf2e46d55", "imm2": "0x29701828", "rot": 31, "bit": 28, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 34, "op": "add", "dst": 2, "src": 3, "src2": 0, "imm": "0x58f75b87", "imm2": "0x343b7aee", "rot": 12, "bit": 14, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 35, "op": "mulhi", "dst": 2, "src": 5, "src2": 6, "imm": "0x5892a9e6", "imm2": "0xc9824c94", "rot": 19, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 36, "op": "xor", "dst": 4, "src": 2, "src2": 3, "imm": "0x7b5b5474", "imm2": "0x45cfc5dd", "rot": 17, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 37, "op": "mul", "dst": 6, "src": 5, "src2": 7, "imm": "0xccf564a5", "imm2": "0x873ad101", "rot": 7, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 38, "op": "xor", "dst": 7, "src": 0, "src2": 6, "imm": "0xcac8f06d", "imm2": "0x6b97c683", "rot": 18, "bit": 28, "mask": 2, "width": 1, "win": 0, "off": 0}, - {"i": 39, "op": "add", "dst": 7, "src": 2, "src2": 4, "imm": "0xb8180e9d", "imm2": "0x32bbd117", "rot": 23, "bit": 19, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 40, "op": "rotr", "dst": 2, "src": 3, "src2": 0, "imm": "0x2d6070bc", "imm2": "0x68ff101e", "rot": 13, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 41, "op": "sub", "dst": 7, "src": 0, "src2": 2, "imm": "0x0daf96ea", "imm2": "0x36f37be1", "rot": 5, "bit": 0, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 42, "op": "add", "dst": 4, "src": 3, "src2": 6, "imm": "0x6ced15b7", "imm2": "0x6df7aed4", "rot": 19, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 43, "op": "shfl", "dst": 7, "src": 3, "src2": 5, "imm": "0x8ace05f3", "imm2": "0xd378ec12", "rot": 23, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 44, "op": "load", "dst": 0, "src": 7, "src2": 4, "imm": "0xb0607786", "imm2": "0xc4acabbc", "rot": 13, "bit": 7, "mask": 16, "width": 1, "win": 1, "off": 1}, - {"i": 45, "op": "add", "dst": 1, "src": 6, "src2": 5, "imm": "0xe09f54e9", "imm2": "0x83e825bf", "rot": 23, "bit": 14, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 46, "op": "load", "dst": 3, "src": 1, "src2": 0, "imm": "0x63cc1e4e", "imm2": "0xa1be8118", "rot": 12, "bit": 6, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 47, "op": "load", "dst": 6, "src": 3, "src2": 7, "imm": "0x353f1d79", "imm2": "0x3b2e7456", "rot": 18, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 48, "op": "mulhi", "dst": 4, "src": 2, "src2": 7, "imm": "0x00d8a3cd", "imm2": "0x231866d2", "rot": 21, "bit": 20, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 49, "op": "add", "dst": 5, "src": 0, "src2": 2, "imm": "0xa8bae6df", "imm2": "0xf572bdb9", "rot": 14, "bit": 7, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 50, "op": "shfl", "dst": 0, "src": 7, "src2": 7, "imm": "0x81ef22e1", "imm2": "0x74438fc5", "rot": 28, "bit": 18, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 51, "op": "add", "dst": 6, "src": 0, "src2": 6, "imm": "0x383b9260", "imm2": "0x11e17c61", "rot": 12, "bit": 19, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 52, "op": "load", "dst": 5, "src": 2, "src2": 2, "imm": "0xfb84f451", "imm2": "0x11cd863e", "rot": 21, "bit": 20, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 53, "op": "rotl", "dst": 6, "src": 5, "src2": 4, "imm": "0xb1a7db6b", "imm2": "0x76686b9b", "rot": 12, "bit": 4, "mask": 16, "width": 1, "win": 0, "off": 0}, - {"i": 54, "op": "rotl", "dst": 3, "src": 6, "src2": 3, "imm": "0x6f981f52", "imm2": "0xd99aeba2", "rot": 12, "bit": 27, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 55, "op": "add", "dst": 2, "src": 1, "src2": 2, "imm": "0xac6be8e3", "imm2": "0x18d67dbb", "rot": 26, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 56, "op": "load", "dst": 1, "src": 4, "src2": 0, "imm": "0x7e7f6a00", "imm2": "0x6f0747da", "rot": 25, "bit": 28, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 57, "op": "add", "dst": 5, "src": 0, "src2": 4, "imm": "0xf03673fe", "imm2": "0xa75cd60d", "rot": 16, "bit": 12, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 58, "op": "load", "dst": 5, "src": 0, "src2": 2, "imm": "0x227f94a6", "imm2": "0x0e8344f9", "rot": 20, "bit": 10, "mask": 2, "width": 1, "win": 2, "off": 0}, - {"i": 59, "op": "add", "dst": 1, "src": 4, "src2": 3, "imm": "0xdecd4794", "imm2": "0x8dfb96bb", "rot": 21, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, - {"i": 60, "op": "mulhi", "dst": 3, "src": 2, "src2": 2, "imm": "0x0dd268e0", "imm2": "0x53034ca9", "rot": 1, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 61, "op": "or", "dst": 6, "src": 4, "src2": 7, "imm": "0x3a45a321", "imm2": "0x9bc59a5f", "rot": 25, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, - {"i": 62, "op": "shfl", "dst": 5, "src": 4, "src2": 2, "imm": "0x8f229cc1", "imm2": "0xcaac64a2", "rot": 17, "bit": 13, "mask": 8, "width": 1, "win": 0, "off": 0}, - {"i": 63, "op": "load", "dst": 3, "src": 6, "src2": 6, "imm": "0xb2574178", "imm2": "0xcbcc798d", "rot": 28, "bit": 0, "mask": 16, "width": 1, "win": 1, "off": 1} + {"i": 0, "op": "rotl", "dst": 7, "src": 2, "src2": 3, "imm": "0xb74ea98c", "imm2": "0x8b3d47ad", "rot": 4, "bit": 26, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 1, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xfe289106", "imm2": "0x3b97ce9c", "rot": 20, "bit": 2, "mask": 8, "width": 1, "win": 2, "off": 3}, + {"i": 2, "op": "mad", "dst": 7, "src": 1, "src2": 2, "imm": "0x489003a1", "imm2": "0xbd2e8079", "rot": 22, "bit": 5, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 3, "op": "mulhi", "dst": 3, "src": 0, "src2": 3, "imm": "0x0da6b978", "imm2": "0x7179d04b", "rot": 14, "bit": 18, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 4, "op": "load", "dst": 0, "src": 4, "src2": 3, "imm": "0x81ea96d2", "imm2": "0x4bec214d", "rot": 8, "bit": 24, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 5, "op": "mad", "dst": 1, "src": 7, "src2": 5, "imm": "0x4e1e08da", "imm2": "0x50f04290", "rot": 24, "bit": 18, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 6, "op": "load", "dst": 6, "src": 0, "src2": 4, "imm": "0xfc5a8e96", "imm2": "0x1593265a", "rot": 4, "bit": 13, "mask": 1, "width": 1, "win": 2, "off": 1}, + {"i": 7, "op": "mul", "dst": 1, "src": 0, "src2": 2, "imm": "0xfd4c1c2d", "imm2": "0x64c58a5a", "rot": 8, "bit": 30, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 8, "op": "mulhi", "dst": 3, "src": 6, "src2": 5, "imm": "0x544a6b11", "imm2": "0x7031aec6", "rot": 11, "bit": 27, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 9, "op": "mul", "dst": 1, "src": 5, "src2": 6, "imm": "0xbc0e991a", "imm2": "0x24951f6f", "rot": 9, "bit": 20, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 10, "op": "load", "dst": 6, "src": 7, "src2": 6, "imm": "0xd1d3b4dc", "imm2": "0x8abc511a", "rot": 24, "bit": 10, "mask": 2, "width": 1, "win": 1, "off": 1}, + {"i": 11, "op": "rotl", "dst": 2, "src": 7, "src2": 4, "imm": "0xefd8d9fe", "imm2": "0xf313ac11", "rot": 29, "bit": 26, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 12, "op": "load", "dst": 1, "src": 2, "src2": 6, "imm": "0x1ff2abc5", "imm2": "0x29973085", "rot": 12, "bit": 11, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 13, "op": "add", "dst": 6, "src": 2, "src2": 3, "imm": "0x2adfcf68", "imm2": "0x3dfa4fd3", "rot": 24, "bit": 16, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 14, "op": "mad", "dst": 7, "src": 6, "src2": 7, "imm": "0xc74e15bb", "imm2": "0x1998b9e9", "rot": 29, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 15, "op": "xor", "dst": 3, "src": 1, "src2": 4, "imm": "0xc1fa1c2b", "imm2": "0x19cd611e", "rot": 28, "bit": 24, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 16, "op": "rotr", "dst": 4, "src": 1, "src2": 1, "imm": "0x3d51348b", "imm2": "0xca99cc47", "rot": 25, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 17, "op": "add", "dst": 0, "src": 6, "src2": 7, "imm": "0x80dfe651", "imm2": "0x07ec281f", "rot": 19, "bit": 27, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 18, "op": "shfl", "dst": 1, "src": 6, "src2": 6, "imm": "0x57e8ff73", "imm2": "0xf30de8b1", "rot": 8, "bit": 15, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 19, "op": "sub", "dst": 2, "src": 5, "src2": 1, "imm": "0x226c75ff", "imm2": "0x2b5113d6", "rot": 10, "bit": 8, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 20, "op": "load", "dst": 6, "src": 1, "src2": 0, "imm": "0xeb29619b", "imm2": "0x77e96401", "rot": 6, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 21, "op": "mad", "dst": 0, "src": 2, "src2": 1, "imm": "0x0a7cd83e", "imm2": "0xd621a06a", "rot": 14, "bit": 18, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 22, "op": "sub", "dst": 3, "src": 1, "src2": 3, "imm": "0x918d7d68", "imm2": "0x4b274765", "rot": 13, "bit": 8, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 23, "op": "mad", "dst": 4, "src": 6, "src2": 6, "imm": "0x09f6ad80", "imm2": "0x8ee100af", "rot": 19, "bit": 13, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 24, "op": "rotr", "dst": 1, "src": 0, "src2": 6, "imm": "0x7e2a526e", "imm2": "0xeee2ff2b", "rot": 9, "bit": 29, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 25, "op": "or", "dst": 6, "src": 2, "src2": 6, "imm": "0x422b8abe", "imm2": "0xd0fb548e", "rot": 9, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 26, "op": "mulhi", "dst": 6, "src": 3, "src2": 1, "imm": "0x6fa482a1", "imm2": "0x51d399ff", "rot": 19, "bit": 24, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 27, "op": "load", "dst": 4, "src": 7, "src2": 4, "imm": "0xd995cc5a", "imm2": "0xd83339c3", "rot": 11, "bit": 7, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 28, "op": "mad", "dst": 4, "src": 3, "src2": 5, "imm": "0xebaeffff", "imm2": "0xf1b43544", "rot": 9, "bit": 19, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 29, "op": "sub", "dst": 6, "src": 5, "src2": 3, "imm": "0xdbb84507", "imm2": "0xefef3aa1", "rot": 2, "bit": 17, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 30, "op": "load", "dst": 6, "src": 2, "src2": 2, "imm": "0x8410ad34", "imm2": "0x97753c2a", "rot": 2, "bit": 11, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 31, "op": "shfl", "dst": 2, "src": 3, "src2": 7, "imm": "0xb565fe25", "imm2": "0xc3cf133b", "rot": 27, "bit": 9, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 32, "op": "sub", "dst": 2, "src": 1, "src2": 4, "imm": "0xa3972163", "imm2": "0x7601161c", "rot": 31, "bit": 16, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 33, "op": "xor", "dst": 4, "src": 1, "src2": 3, "imm": "0xb0e6bf16", "imm2": "0x47bab3e2", "rot": 5, "bit": 4, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 34, "op": "shfl", "dst": 6, "src": 3, "src2": 7, "imm": "0xc5d311aa", "imm2": "0xc3d65f5f", "rot": 10, "bit": 11, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 35, "op": "load", "dst": 7, "src": 4, "src2": 5, "imm": "0x78d74049", "imm2": "0x21718728", "rot": 22, "bit": 20, "mask": 2, "width": 1, "win": 2, "off": 3}, + {"i": 36, "op": "add", "dst": 5, "src": 6, "src2": 6, "imm": "0x165f4767", "imm2": "0x8a978b3c", "rot": 25, "bit": 11, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 37, "op": "mul", "dst": 5, "src": 2, "src2": 1, "imm": "0xeca4eb38", "imm2": "0x44f1ccf1", "rot": 2, "bit": 14, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 38, "op": "mad", "dst": 7, "src": 1, "src2": 4, "imm": "0x21766790", "imm2": "0xdfdd8f07", "rot": 4, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 39, "op": "xor", "dst": 5, "src": 7, "src2": 4, "imm": "0x636c35f9", "imm2": "0x08b26d02", "rot": 24, "bit": 21, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 40, "op": "load", "dst": 1, "src": 7, "src2": 4, "imm": "0xdaf67234", "imm2": "0x943f63f1", "rot": 7, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 41, "op": "load", "dst": 2, "src": 0, "src2": 5, "imm": "0xb269db8f", "imm2": "0x6d74e05c", "rot": 31, "bit": 13, "mask": 2, "width": 1, "win": 2, "off": 1}, + {"i": 42, "op": "xor", "dst": 5, "src": 2, "src2": 5, "imm": "0x21eb091a", "imm2": "0x668a424f", "rot": 27, "bit": 27, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 43, "op": "load", "dst": 1, "src": 3, "src2": 4, "imm": "0x367d0c30", "imm2": "0x9362cac7", "rot": 8, "bit": 16, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 44, "op": "add", "dst": 6, "src": 4, "src2": 7, "imm": "0x7950576c", "imm2": "0xd11e2feb", "rot": 11, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 45, "op": "load", "dst": 6, "src": 1, "src2": 1, "imm": "0x736a8282", "imm2": "0xe6d0e698", "rot": 30, "bit": 8, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 46, "op": "rotr", "dst": 1, "src": 3, "src2": 5, "imm": "0x2768820e", "imm2": "0x8b122f17", "rot": 6, "bit": 7, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 47, "op": "mulhi", "dst": 6, "src": 1, "src2": 2, "imm": "0x82d0601d", "imm2": "0xeb7084f0", "rot": 8, "bit": 29, "mask": 8, "width": 1, "win": 0, "off": 0}, + {"i": 48, "op": "shfl", "dst": 3, "src": 7, "src2": 7, "imm": "0xfc429de4", "imm2": "0x6dab6aa6", "rot": 25, "bit": 10, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 49, "op": "rotr", "dst": 4, "src": 5, "src2": 6, "imm": "0x060459f7", "imm2": "0x1bc3b285", "rot": 14, "bit": 3, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 50, "op": "mul", "dst": 0, "src": 7, "src2": 0, "imm": "0xd646866a", "imm2": "0xea39a9a7", "rot": 25, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 51, "op": "mad", "dst": 5, "src": 6, "src2": 5, "imm": "0xa9534e41", "imm2": "0x91716ae6", "rot": 11, "bit": 23, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 52, "op": "load", "dst": 3, "src": 1, "src2": 5, "imm": "0xacc543ad", "imm2": "0xceca4a40", "rot": 25, "bit": 26, "mask": 8, "width": 1, "win": 1, "off": 1}, + {"i": 53, "op": "load", "dst": 5, "src": 3, "src2": 5, "imm": "0xe4f778df", "imm2": "0xf2fd326e", "rot": 1, "bit": 12, "mask": 16, "width": 1, "win": 0, "off": 0}, + {"i": 54, "op": "load", "dst": 6, "src": 5, "src2": 7, "imm": "0x2e6979f2", "imm2": "0x9074a681", "rot": 28, "bit": 21, "mask": 16, "width": 1, "win": 2, "off": 1}, + {"i": 55, "op": "rotl", "dst": 5, "src": 7, "src2": 2, "imm": "0xa03d9a31", "imm2": "0x1edad893", "rot": 18, "bit": 16, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 56, "op": "shfl", "dst": 4, "src": 3, "src2": 4, "imm": "0xf576d4f5", "imm2": "0xc49f73a7", "rot": 10, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 57, "op": "xor", "dst": 5, "src": 0, "src2": 6, "imm": "0x3bb49aa0", "imm2": "0xa4d97985", "rot": 17, "bit": 14, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 58, "op": "rotl", "dst": 1, "src": 6, "src2": 2, "imm": "0xa7cd939b", "imm2": "0x5e1de7ae", "rot": 28, "bit": 24, "mask": 2, "width": 1, "win": 0, "off": 0}, + {"i": 59, "op": "sub", "dst": 0, "src": 7, "src2": 7, "imm": "0xf4b46978", "imm2": "0x8858145f", "rot": 10, "bit": 18, "mask": 1, "width": 1, "win": 0, "off": 0}, + {"i": 60, "op": "rotr", "dst": 1, "src": 0, "src2": 7, "imm": "0xcdbd8508", "imm2": "0xe8da863a", "rot": 14, "bit": 2, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 61, "op": "mul", "dst": 1, "src": 0, "src2": 4, "imm": "0xbfc97de8", "imm2": "0xef9005bd", "rot": 14, "bit": 7, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 62, "op": "xor", "dst": 6, "src": 0, "src2": 7, "imm": "0xb2f442e8", "imm2": "0x4054a66a", "rot": 20, "bit": 28, "mask": 4, "width": 1, "win": 0, "off": 0}, + {"i": 63, "op": "mul", "dst": 5, "src": 4, "src2": 4, "imm": "0x8e93815d", "imm2": "0xbaa794a5", "rot": 24, "bit": 8, "mask": 16, "width": 1, "win": 0, "off": 0} ] } diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/program.metal b/proto-cuda/packs-ca3-v4/v4-era-5/program.metal index 84ec07eeb..c652f8fb3 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/program.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-5/program.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -38,328 +38,328 @@ kernel void igneum_hash(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/program_bound.metal b/proto-cuda/packs-ca3-v4/v4-era-5/program_bound.metal index 56ff04a65..f5818d7e9 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/program_bound.metal +++ b/proto-cuda/packs-ca3-v4/v4-era-5/program_bound.metal @@ -2,7 +2,7 @@ using namespace metal; #define MASK 0x0fffffffu -constant uint SEEDW[8] = { 0x667d0fbdu, 0x7b8e5963u, 0x31c67e5eu, 0x4529ddc6u, 0xef19d6d8u, 0xaccf6211u, 0xda0aed32u, 0xabc6df31u }; +constant uint SEEDW[8] = { 0x29e76ddbu, 0xdb25cf2au, 0x596c281eu, 0xb8284534u, 0x50556ce6u, 0x336eb6d5u, 0x01933285u, 0x39690d9fu }; inline uint splitmix32(uint x) { x ^= x >> 16; x *= 0x7feb352du; @@ -40,328 +40,328 @@ kernel void igneum_hash_bound(device const uint* dataset [[buffer(0)]], for (uint it = 0u; it < 8u; ++it) { uint sel = r0; - r4 = r4 + r5 + select(0xea86e152u, 0x5810667au, ((sel >> 13u) & 1u) != 0u); // 0 - r7 = r7 ^ r0; // 1 - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)1); // 2 - r4 = r4 - r1; // 3 - r2 = r0 * r4 + r2; // 4 - r4 = rotl_imm(r4, 9u); // 5 - r0 = rotr_var(r0, r2); // 6 - r6 = r6 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 7 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 8 - r1 = r1 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 9 - r7 = r7 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 - r7 = r7 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 11 - r5 = r5 * r4; // 12 - r7 = r7 ^ dataset[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 13 - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // 14 - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)1); // 15 - r2 = r2 | r7; // 16 - r0 = rotr_var(r0, r6); // 17 - r7 = r7 + r5 + select(0xf66e7017u, 0xb9e3577eu, ((sel >> 12u) & 1u) != 0u); // 18 - r7 = rotl_imm(r7, 24u); // 19 - r6 = r6 + r7 + select(0x52334d12u, 0x8c9f0ef8u, ((sel >> 23u) & 1u) != 0u); // 20 - r2 = r2 | r6; // 21 - r6 = r5 * r4 + r6; // 22 - r1 = r1 | r0; // 23 - r6 = r6 ^ r1; // 24 - r2 = r2 + r6 + select(0x659fc3d3u, 0x9cec0e12u, ((sel >> 17u) & 1u) != 0u); // 25 - r7 = rotr_var(r7, r0); // 26 - r4 = r5 * r7 + r4; // 27 - r3 = r2 * r4 + r3; // 28 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 29 - r2 = r2 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x08000000u) & MASK]; // 30 - r1 = r1 ^ dataset[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 31 - r7 = r7 + r2 + select(0x070888a8u, 0xe403240eu, ((sel >> 16u) & 1u) != 0u); // 32 - r2 = r2 + r0 + select(0xf2e46d55u, 0x29701828u, ((sel >> 28u) & 1u) != 0u); // 33 - r2 = r2 + r3 + select(0x58f75b87u, 0x343b7aeeu, ((sel >> 14u) & 1u) != 0u); // 34 - r2 = mulhi(r2, r5); // 35 - r4 = r4 ^ r2; // 36 - r6 = r6 * r5; // 37 - r7 = r7 ^ r0; // 38 - r7 = r7 + r2 + select(0xb8180e9du, 0x32bbd117u, ((sel >> 19u) & 1u) != 0u); // 39 - r2 = rotr_var(r2, r3); // 40 - r7 = r7 - r0; // 41 - r4 = r4 + r3 + select(0x6ced15b7u, 0x6df7aed4u, ((sel >> 4u) & 1u) != 0u); // 42 - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // 43 - r0 = r0 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 44 - r1 = r1 + r6 + select(0xe09f54e9u, 0x83e825bfu, ((sel >> 14u) & 1u) != 0u); // 45 - r3 = r3 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 46 - r6 = r6 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 47 - r4 = mulhi(r4, r2); // 48 - r5 = r5 + r0 + select(0xa8bae6dfu, 0xf572bdb9u, ((sel >> 7u) & 1u) != 0u); // 49 - r0 = r0 ^ simd_shuffle_xor(r7, (ushort)4); // 50 - r6 = r6 + r0 + select(0x383b9260u, 0x11e17c61u, ((sel >> 19u) & 1u) != 0u); // 51 - r5 = r5 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 52 - r6 = rotl_imm(r6, 12u); // 53 - r3 = rotl_imm(r3, 12u); // 54 - r2 = r2 + r1 + select(0xac6be8e3u, 0x18d67dbbu, ((sel >> 10u) & 1u) != 0u); // 55 - r1 = r1 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 56 - r5 = r5 + r0 + select(0xf03673feu, 0xa75cd60du, ((sel >> 12u) & 1u) != 0u); // 57 - r5 = r5 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x00000000u) & MASK]; // 58 - r1 = r1 + r4 + select(0xdecd4794u, 0x8dfb96bbu, ((sel >> 7u) & 1u) != 0u); // 59 - r3 = mulhi(r3, r2); // 60 - r6 = r6 | r4; // 61 - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)8); // 62 - r3 = r3 ^ dataset[((rotl_imm(r6 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 63 + r7 = rotl_imm(r7, 4u); // 0 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 1 + r7 = r1 * r2 + r7; // 2 + r3 = mulhi(r3, r0); // 3 + r0 = r0 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 4 + r1 = r7 * r5 + r1; // 5 + r6 = r6 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 6 + r1 = r1 * r0; // 7 + r3 = mulhi(r3, r6); // 8 + r1 = r1 * r5; // 9 + r6 = r6 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 10 + r2 = rotl_imm(r2, 29u); // 11 + r1 = r1 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 12 + r6 = r6 + r2 + select(0x2adfcf68u, 0x3dfa4fd3u, ((sel >> 16u) & 1u) != 0u); // 13 + r7 = r6 * r7 + r7; // 14 + r3 = r3 ^ r1; // 15 + r4 = rotr_var(r4, r1); // 16 + r0 = r0 + r6 + select(0x80dfe651u, 0x07ec281fu, ((sel >> 27u) & 1u) != 0u); // 17 + r1 = r1 ^ simd_shuffle_xor(r6, (ushort)1); // 18 + r2 = r2 - r5; // 19 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 20 + r0 = r2 * r1 + r0; // 21 + r3 = r3 - r1; // 22 + r4 = r6 * r6 + r4; // 23 + r1 = rotr_var(r1, r0); // 24 + r6 = r6 | r2; // 25 + r6 = mulhi(r6, r3); // 26 + r4 = r4 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 27 + r4 = r3 * r5 + r4; // 28 + r6 = r6 - r5; // 29 + r6 = r6 ^ dataset[((rotl_imm(r2 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 30 + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)2); // 31 + r2 = r2 - r1; // 32 + r4 = r4 ^ r1; // 33 + r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // 34 + r7 = r7 ^ dataset[((rotl_imm(r4 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x0c000000u) & MASK]; // 35 + r5 = r5 + r6 + select(0x165f4767u, 0x8a978b3cu, ((sel >> 11u) & 1u) != 0u); // 36 + r5 = r5 * r2; // 37 + r7 = r1 * r4 + r7; // 38 + r5 = r5 ^ r7; // 39 + r1 = r1 ^ dataset[((rotl_imm(r7 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 40 + r2 = r2 ^ dataset[((rotl_imm(r0 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 41 + r5 = r5 ^ r2; // 42 + r1 = r1 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 43 + r6 = r6 + r4 + select(0x7950576cu, 0xd11e2febu, ((sel >> 18u) & 1u) != 0u); // 44 + r6 = r6 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 45 + r1 = rotr_var(r1, r3); // 46 + r6 = mulhi(r6, r1); // 47 + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)4); // 48 + r4 = rotr_var(r4, r5); // 49 + r0 = r0 * r7; // 50 + r5 = r6 * r5 + r5; // 51 + r3 = r3 ^ dataset[((rotl_imm(r1 * 0x03ac37adu, 22u) & 0x07ffffffu) | 0x08000000u) & MASK]; // 52 + r5 = r5 ^ dataset[((rotl_imm(r3 * 0x03ac37adu, 22u) & 0x0fffffffu) | 0x00000000u) & MASK]; // 53 + r6 = r6 ^ dataset[((rotl_imm(r5 * 0x03ac37adu, 22u) & 0x03ffffffu) | 0x04000000u) & MASK]; // 54 + r5 = rotl_imm(r5, 18u); // 55 + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)2); // 56 + r5 = r5 ^ r0; // 57 + r1 = rotl_imm(r1, 28u); // 58 + r0 = r0 - r7; // 59 + r1 = rotr_var(r1, r0); // 60 + r1 = r1 * r0; // 61 + r6 = r6 ^ r0; // 62 + r5 = r5 * r4; // 63 // latency-shadow block (Counter ASIC 3.0 item 8): 256 ALU instructions x 27 passes after instruction 63, no load for (uint sh = 0u; sh < 27u; ++sh) { - r7 = r7 * r3; // s0 mul - r7 = r7 + r4 + select(0xecb44e9cu, 0x06575fd2u, ((sel >> 16u) & 1u) != 0u); // s1 add - r5 = mulhi(r5, r0); // s2 mulhi - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)2); // s3 shfl - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)1); // s4 shfl - r4 = r4 ^ simd_shuffle_xor(r5, (ushort)8); // s5 shfl - r6 = r6 - r1; // s6 sub - r3 = r3 | r4; // s7 or - r0 = r4 * r7 + r0; // s8 mad - r3 = r3 - r4; // s9 sub - r6 = r6 * r3; // s10 mul - r5 = mulhi(r5, r0); // s11 mulhi - r0 = r4 * r5 + r0; // s12 mad - r3 = r3 + r7 + select(0x78295146u, 0x41da8352u, ((sel >> 29u) & 1u) != 0u); // s13 add - r7 = r7 ^ r2; // s14 xor - r1 = r1 + r4 + select(0x1126a483u, 0x491bea93u, ((sel >> 12u) & 1u) != 0u); // s15 add - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)8); // s16 shfl - r5 = rotr_var(r5, r0); // s17 rotr - r2 = r2 - r1; // s18 sub - r3 = mulhi(r3, r2); // s19 mulhi - r0 = r0 ^ r4; // s20 xor - r2 = r2 + r3 + select(0x7289ac7cu, 0xd0df3d0au, ((sel >> 31u) & 1u) != 0u); // s21 add - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s22 shfl - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)8); // s23 shfl - r1 = r1 - r2; // s24 sub - r7 = r3 * r1 + r7; // s25 mad - r2 = r2 ^ r6; // s26 xor - r4 = mulhi(r4, r2); // s27 mulhi - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)2); // s28 shfl - r2 = r2 - r5; // s29 sub - r7 = mulhi(r7, r6); // s30 mulhi - r2 = rotr_var(r2, r7); // s31 rotr - r6 = rotl_imm(r6, 26u); // s32 rotl - r0 = r0 * r7; // s33 mul - r7 = r7 * r4; // s34 mul - r6 = r0 * r1 + r6; // s35 mad - r4 = r4 + r2 + select(0xfe2b1c7du, 0xb3e87396u, ((sel >> 4u) & 1u) != 0u); // s36 add - r7 = rotr_var(r7, r4); // s37 rotr - r5 = r2 * r7 + r5; // s38 mad - r6 = r6 + r2 + select(0xe036a560u, 0x31a906adu, ((sel >> 16u) & 1u) != 0u); // s39 add - r3 = r3 ^ simd_shuffle_xor(r6, (ushort)4); // s40 shfl - r5 = r5 ^ r0; // s41 xor - r5 = r5 ^ r3; // s42 xor - r6 = rotl_imm(r6, 31u); // s43 rotl - r0 = rotl_imm(r0, 6u); // s44 rotl - r2 = r0 * r6 + r2; // s45 mad - r0 = r6 * r0 + r0; // s46 mad - r5 = r5 ^ r2; // s47 xor - r1 = r1 + r5 + select(0xd802a3efu, 0xc839ad2eu, ((sel >> 27u) & 1u) != 0u); // s48 add - r0 = r0 ^ simd_shuffle_xor(r1, (ushort)2); // s49 shfl - r6 = r6 + r0 + select(0x8e71c4c0u, 0xe9d06965u, ((sel >> 18u) & 1u) != 0u); // s50 add - r1 = rotl_imm(r1, 3u); // s51 rotl - r6 = r6 ^ r2; // s52 xor - r5 = r5 ^ r6; // s53 xor - r2 = r2 * r6; // s54 mul - r0 = mulhi(r0, r2); // s55 mulhi - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)1); // s56 shfl - r1 = r1 + r2 + select(0xb0eb7d4eu, 0x5b84a832u, ((sel >> 21u) & 1u) != 0u); // s57 add - r0 = rotr_var(r0, r1); // s58 rotr - r6 = r6 + r4 + select(0xd35e37c1u, 0x4e1a16c6u, ((sel >> 8u) & 1u) != 0u); // s59 add - r0 = r0 | r2; // s60 or - r5 = rotr_var(r5, r3); // s61 rotr - r4 = r4 - r2; // s62 sub - r0 = r0 + r1 + select(0x16221227u, 0xec29413au, ((sel >> 27u) & 1u) != 0u); // s63 add - r6 = rotl_imm(r6, 20u); // s64 rotl - r1 = r1 ^ r2; // s65 xor - r6 = rotl_imm(r6, 23u); // s66 rotl - r1 = r1 | r4; // s67 or - r7 = r4 * r0 + r7; // s68 mad - r1 = r1 | r5; // s69 or - r7 = r7 ^ r4; // s70 xor - r2 = r2 * r3; // s71 mul - r0 = r0 * r2; // s72 mul - r7 = r7 + r6 + select(0x5708524au, 0x85c0f694u, ((sel >> 4u) & 1u) != 0u); // s73 add - r3 = r7 * r0 + r3; // s74 mad - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)8); // s75 shfl - r5 = r5 - r7; // s76 sub - r5 = r5 ^ simd_shuffle_xor(r1, (ushort)2); // s77 shfl - r5 = r5 + r0 + select(0xc4195db9u, 0xad4f292bu, ((sel >> 26u) & 1u) != 0u); // s78 add - r5 = r5 * r6; // s79 mul - r6 = r6 ^ simd_shuffle_xor(r7, (ushort)2); // s80 shfl - r5 = r5 * r6; // s81 mul - r7 = r7 | r3; // s82 or - r0 = r4 * r2 + r0; // s83 mad - r4 = rotl_imm(r4, 12u); // s84 rotl - r3 = r3 * r4; // s85 mul - r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s86 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)4); // s87 shfl - r1 = r1 ^ r3; // s88 xor - r5 = r5 ^ r1; // s89 xor - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s90 shfl - r5 = r5 + r0 + select(0x5570a07eu, 0xb41704ddu, ((sel >> 7u) & 1u) != 0u); // s91 add - r0 = mulhi(r0, r1); // s92 mulhi - r6 = r6 ^ simd_shuffle_xor(r0, (ushort)8); // s93 shfl - r3 = r3 + r6 + select(0xcd1be982u, 0x4674baa3u, ((sel >> 18u) & 1u) != 0u); // s94 add - r4 = rotl_imm(r4, 24u); // s95 rotl - r3 = r7 * r4 + r3; // s96 mad - r6 = r6 - r3; // s97 sub - r1 = r5 * r6 + r1; // s98 mad - r6 = rotr_var(r6, r2); // s99 rotr - r5 = r5 ^ r1; // s100 xor - r3 = r3 + r7 + select(0x60f87347u, 0x3d25f873u, ((sel >> 7u) & 1u) != 0u); // s101 add - r3 = r3 - r5; // s102 sub - r3 = r3 - r6; // s103 sub - r1 = r1 ^ simd_shuffle_xor(r6, (ushort)4); // s104 shfl - r3 = r3 | r5; // s105 or - r0 = r0 + r1 + select(0x9a16bcfbu, 0x018722b4u, ((sel >> 22u) & 1u) != 0u); // s106 add - r2 = r2 + r5 + select(0xbc4b5e44u, 0x44cbb3d8u, ((sel >> 6u) & 1u) != 0u); // s107 add - r2 = r6 * r1 + r2; // s108 mad - r0 = r0 ^ r1; // s109 xor - r4 = r4 | r2; // s110 or - r2 = rotl_imm(r2, 13u); // s111 rotl - r5 = mulhi(r5, r2); // s112 mulhi - r5 = r5 ^ r1; // s113 xor - r0 = rotl_imm(r0, 15u); // s114 rotl - r7 = r7 * r0; // s115 mul - r0 = r7 * r0 + r0; // s116 mad - r4 = rotl_imm(r4, 12u); // s117 rotl - r1 = r1 * r6; // s118 mul - r0 = mulhi(r0, r3); // s119 mulhi - r4 = r0 * r0 + r4; // s120 mad - r0 = r0 + r5 + select(0x227a1887u, 0x153e7b81u, ((sel >> 16u) & 1u) != 0u); // s121 add - r6 = r6 + r3 + select(0xfbb1908bu, 0x537e0843u, ((sel >> 31u) & 1u) != 0u); // s122 add - r4 = mulhi(r4, r5); // s123 mulhi - r3 = r3 ^ r1; // s124 xor - r3 = r3 + r7 + select(0xc3e1337du, 0xc2875857u, ((sel >> 15u) & 1u) != 0u); // s125 add - r4 = rotr_var(r4, r7); // s126 rotr - r1 = r1 ^ simd_shuffle_xor(r0, (ushort)2); // s127 shfl - r3 = rotr_var(r3, r6); // s128 rotr - r1 = r1 * r0; // s129 mul - r4 = r4 ^ simd_shuffle_xor(r1, (ushort)16); // s130 shfl - r4 = r4 + r0 + select(0x87bd1ad9u, 0x39900c5eu, ((sel >> 5u) & 1u) != 0u); // s131 add - r3 = r0 * r3 + r3; // s132 mad - r4 = r4 * r2; // s133 mul - r5 = r6 * r0 + r5; // s134 mad - r4 = r5 * r4 + r4; // s135 mad - r6 = r6 + r3 + select(0xc59dd71du, 0xcb7e81cau, ((sel >> 28u) & 1u) != 0u); // s136 add - r7 = r7 * r5; // s137 mul - r6 = r6 * r3; // s138 mul - r0 = rotr_var(r0, r4); // s139 rotr - r3 = r3 ^ simd_shuffle_xor(r5, (ushort)16); // s140 shfl - r6 = rotr_var(r6, r7); // s141 rotr - r3 = r3 * r7; // s142 mul - r0 = r0 + r7 + select(0x273f8ee2u, 0x602dc90du, ((sel >> 9u) & 1u) != 0u); // s143 add - r5 = rotl_imm(r5, 26u); // s144 rotl - r2 = r2 ^ r4; // s145 xor - r6 = r6 ^ simd_shuffle_xor(r5, (ushort)16); // s146 shfl - r1 = r1 * r4; // s147 mul - r2 = r1 * r7 + r2; // s148 mad - r7 = rotr_var(r7, r2); // s149 rotr - r7 = rotr_var(r7, r3); // s150 rotr - r5 = r5 + r2 + select(0x6f435830u, 0xb3e8ca69u, ((sel >> 17u) & 1u) != 0u); // s151 add - r6 = r6 ^ r2; // s152 xor - r1 = r1 ^ simd_shuffle_xor(r2, (ushort)16); // s153 shfl - r2 = r2 ^ r6; // s154 xor - r5 = rotr_var(r5, r7); // s155 rotr - r1 = r1 ^ simd_shuffle_xor(r3, (ushort)4); // s156 shfl - r6 = r6 ^ r5; // s157 xor - r0 = r0 ^ r7; // s158 xor - r0 = r0 ^ r7; // s159 xor - r0 = mulhi(r0, r3); // s160 mulhi - r1 = r1 * r5; // s161 mul - r4 = rotr_var(r4, r0); // s162 rotr - r4 = r1 * r2 + r4; // s163 mad - r3 = r3 + r6 + select(0x7b5c68f7u, 0xe88bec07u, ((sel >> 18u) & 1u) != 0u); // s164 add - r0 = rotl_imm(r0, 13u); // s165 rotl - r2 = r2 ^ r6; // s166 xor - r5 = r5 ^ simd_shuffle_xor(r4, (ushort)16); // s167 shfl - r2 = r2 ^ simd_shuffle_xor(r7, (ushort)2); // s168 shfl - r7 = r7 ^ r6; // s169 xor - r0 = r7 * r2 + r0; // s170 mad - r3 = rotl_imm(r3, 3u); // s171 rotl - r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s172 shfl - r0 = r0 + r1 + select(0xc53a1209u, 0xadc930fcu, ((sel >> 28u) & 1u) != 0u); // s173 add - r0 = r0 * r6; // s174 mul - r7 = mulhi(r7, r0); // s175 mulhi - r3 = r3 | r2; // s176 or - r4 = r4 + r3 + select(0x2def94b8u, 0x36cdb68eu, ((sel >> 16u) & 1u) != 0u); // s177 add - r6 = r6 ^ r2; // s178 xor - r0 = rotl_imm(r0, 16u); // s179 rotl - r4 = r4 + r3 + select(0x774065efu, 0x230f4372u, ((sel >> 5u) & 1u) != 0u); // s180 add - r6 = r2 * r2 + r6; // s181 mad - r4 = r4 + r5 + select(0x8c37e75bu, 0xbc379c7cu, ((sel >> 18u) & 1u) != 0u); // s182 add - r0 = rotl_imm(r0, 26u); // s183 rotl - r4 = r4 | r2; // s184 or - r0 = r0 * r2; // s185 mul - r3 = r3 | r5; // s186 or - r1 = mulhi(r1, r0); // s187 mulhi - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)16); // s188 shfl - r5 = rotr_var(r5, r4); // s189 rotr - r3 = r0 * r3 + r3; // s190 mad - r1 = r1 | r7; // s191 or - r7 = r7 | r1; // s192 or - r1 = r5 * r4 + r1; // s193 mad - r0 = r0 - r7; // s194 sub - r6 = r6 + r0 + select(0x2f8a59eeu, 0x8751e547u, ((sel >> 9u) & 1u) != 0u); // s195 add - r0 = rotl_imm(r0, 8u); // s196 rotl - r3 = r3 + r4 + select(0x0f369a86u, 0x02b9bb4cu, ((sel >> 2u) & 1u) != 0u); // s197 add - r4 = r4 + r2 + select(0xe7922061u, 0x74240d4cu, ((sel >> 11u) & 1u) != 0u); // s198 add - r2 = r2 * r5; // s199 mul - r6 = r6 + r7 + select(0xee0e3356u, 0x7649c3c3u, ((sel >> 16u) & 1u) != 0u); // s200 add - r6 = r6 ^ simd_shuffle_xor(r1, (ushort)16); // s201 shfl - r4 = r4 * r2; // s202 mul - r3 = r3 ^ simd_shuffle_xor(r2, (ushort)1); // s203 shfl - r7 = r2 * r1 + r7; // s204 mad - r2 = rotl_imm(r2, 5u); // s205 rotl - r7 = r7 ^ simd_shuffle_xor(r1, (ushort)8); // s206 shfl - r7 = r7 * r2; // s207 mul - r0 = r0 * r3; // s208 mul - r1 = rotl_imm(r1, 7u); // s209 rotl - r5 = r5 + r3 + select(0xc8db10a0u, 0x3d8f8187u, ((sel >> 23u) & 1u) != 0u); // s210 add - r5 = r5 - r0; // s211 sub - r0 = rotr_var(r0, r7); // s212 rotr - r4 = r4 ^ simd_shuffle_xor(r2, (ushort)8); // s213 shfl - r1 = r1 ^ r3; // s214 xor - r1 = rotl_imm(r1, 19u); // s215 rotl - r6 = r6 ^ simd_shuffle_xor(r3, (ushort)2); // s216 shfl - r2 = mulhi(r2, r5); // s217 mulhi - r5 = rotl_imm(r5, 14u); // s218 rotl - r2 = r2 ^ simd_shuffle_xor(r1, (ushort)8); // s219 shfl - r7 = r7 - r5; // s220 sub - r3 = mulhi(r3, r6); // s221 mulhi - r7 = r7 | r1; // s222 or - r1 = mulhi(r1, r5); // s223 mulhi - r7 = r7 + r5 + select(0x689cdcf5u, 0xd5a3fb54u, ((sel >> 24u) & 1u) != 0u); // s224 add - r5 = r5 ^ simd_shuffle_xor(r7, (ushort)16); // s225 shfl - r3 = mulhi(r3, r2); // s226 mulhi - r0 = r0 ^ r2; // s227 xor - r7 = r7 + r4 + select(0x267f928du, 0xba3b9728u, ((sel >> 8u) & 1u) != 0u); // s228 add - r1 = r1 ^ simd_shuffle_xor(r7, (ushort)2); // s229 shfl - r4 = r4 - r6; // s230 sub - r0 = r0 | r1; // s231 or - r2 = rotl_imm(r2, 10u); // s232 rotl - r4 = r4 * r7; // s233 mul - r6 = r0 * r0 + r6; // s234 mad - r4 = rotl_imm(r4, 29u); // s235 rotl - r7 = r7 + r2 + select(0xed6dd62au, 0xa437db0eu, ((sel >> 13u) & 1u) != 0u); // s236 add - r4 = rotr_var(r4, r7); // s237 rotr - r2 = r2 + r0 + select(0x9f612006u, 0x1c000e82u, ((sel >> 17u) & 1u) != 0u); // s238 add - r7 = mulhi(r7, r5); // s239 mulhi - r3 = mulhi(r3, r6); // s240 mulhi - r0 = r0 ^ r7; // s241 xor - r4 = rotl_imm(r4, 11u); // s242 rotl - r3 = rotl_imm(r3, 21u); // s243 rotl - r4 = r4 + r2 + select(0x83ba196cu, 0x12705678u, ((sel >> 13u) & 1u) != 0u); // s244 add - r7 = r7 + r5 + select(0xa5d39c13u, 0xea712528u, ((sel >> 2u) & 1u) != 0u); // s245 add - r0 = r0 * r5; // s246 mul - r4 = r4 ^ simd_shuffle_xor(r0, (ushort)2); // s247 shfl - r3 = r3 ^ r2; // s248 xor - r7 = r7 ^ simd_shuffle_xor(r3, (ushort)4); // s249 shfl - r5 = r5 ^ simd_shuffle_xor(r3, (ushort)16); // s250 shfl - r5 = r5 + r3 + select(0x3006c6ebu, 0x26ce965fu, ((sel >> 21u) & 1u) != 0u); // s251 add - r3 = rotl_imm(r3, 1u); // s252 rotl - r7 = mulhi(r7, r1); // s253 mulhi - r1 = r1 + r5 + select(0xc2f46c6du, 0x9e34c13fu, ((sel >> 1u) & 1u) != 0u); // s254 add - r4 = rotr_var(r4, r7); // s255 rotr + r4 = r4 | r1; // s0 or + r0 = r2 * r0 + r0; // s1 mad + r0 = r0 - r6; // s2 sub + r2 = r2 | r1; // s3 or + r2 = r2 + r1 + select(0x7281530eu, 0x12eb25c3u, ((sel >> 16u) & 1u) != 0u); // s4 add + r1 = r1 ^ simd_shuffle_xor(r5, (ushort)1); // s5 shfl + r5 = rotl_imm(r5, 19u); // s6 rotl + r6 = rotl_imm(r6, 1u); // s7 rotl + r5 = r3 * r4 + r5; // s8 mad + r1 = r7 * r3 + r1; // s9 mad + r5 = r5 + r0 + select(0xd4a7ed9eu, 0x47f0ce9fu, ((sel >> 2u) & 1u) != 0u); // s10 add + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)8); // s11 shfl + r5 = r3 * r2 + r5; // s12 mad + r3 = r3 + r0 + select(0x80b09095u, 0x39d16785u, ((sel >> 17u) & 1u) != 0u); // s13 add + r5 = r5 | r1; // s14 or + r0 = r0 + r1 + select(0xdea5ac3fu, 0xdca22ff9u, ((sel >> 29u) & 1u) != 0u); // s15 add + r5 = r5 * r7; // s16 mul + r3 = r3 - r1; // s17 sub + r1 = r1 ^ simd_shuffle_xor(r0, (ushort)4); // s18 shfl + r0 = rotl_imm(r0, 26u); // s19 rotl + r7 = mulhi(r7, r1); // s20 mulhi + r7 = r7 * r1; // s21 mul + r0 = r0 ^ r4; // s22 xor + r5 = mulhi(r5, r7); // s23 mulhi + r0 = rotl_imm(r0, 5u); // s24 rotl + r1 = rotr_var(r1, r3); // s25 rotr + r0 = r0 * r3; // s26 mul + r2 = rotr_var(r2, r3); // s27 rotr + r6 = r6 + r2 + select(0xd4145381u, 0xf7b2ae68u, ((sel >> 8u) & 1u) != 0u); // s28 add + r1 = r1 | r0; // s29 or + r1 = r1 - r5; // s30 sub + r5 = rotr_var(r5, r4); // s31 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s32 shfl + r1 = r1 | r3; // s33 or + r0 = rotl_imm(r0, 7u); // s34 rotl + r5 = rotl_imm(r5, 29u); // s35 rotl + r7 = r7 ^ r6; // s36 xor + r3 = rotr_var(r3, r2); // s37 rotr + r5 = r5 ^ r7; // s38 xor + r0 = rotr_var(r0, r4); // s39 rotr + r0 = r0 ^ r6; // s40 xor + r4 = r4 * r2; // s41 mul + r1 = r1 - r7; // s42 sub + r1 = r1 + r4 + select(0x3c843ffeu, 0x08943973u, ((sel >> 23u) & 1u) != 0u); // s43 add + r3 = r3 | r1; // s44 or + r4 = r4 * r0; // s45 mul + r0 = r0 ^ r4; // s46 xor + r2 = mulhi(r2, r0); // s47 mulhi + r1 = r1 - r0; // s48 sub + r1 = r1 ^ r4; // s49 xor + r6 = mulhi(r6, r4); // s50 mulhi + r4 = r4 + r2 + select(0x3725676au, 0xaeef7b36u, ((sel >> 25u) & 1u) != 0u); // s51 add + r0 = r0 ^ r2; // s52 xor + r7 = r7 ^ simd_shuffle_xor(r6, (ushort)2); // s53 shfl + r1 = r5 * r1 + r1; // s54 mad + r5 = r5 + r3 + select(0x41cd8f60u, 0xd4d858e5u, ((sel >> 13u) & 1u) != 0u); // s55 add + r2 = r2 - r1; // s56 sub + r7 = r7 + r3 + select(0x8f5932f9u, 0xfa91d5a6u, ((sel >> 6u) & 1u) != 0u); // s57 add + r3 = r3 + r7 + select(0xe7f14444u, 0x970ece18u, ((sel >> 8u) & 1u) != 0u); // s58 add + r2 = r4 * r7 + r2; // s59 mad + r5 = r1 * r7 + r5; // s60 mad + r3 = r3 + r6 + select(0x7c44e743u, 0xd55319ebu, ((sel >> 27u) & 1u) != 0u); // s61 add + r0 = r6 * r5 + r0; // s62 mad + r6 = r6 | r0; // s63 or + r5 = r5 + r7 + select(0x811bed22u, 0x542db8e4u, ((sel >> 16u) & 1u) != 0u); // s64 add + r4 = r4 * r2; // s65 mul + r4 = r4 + r1 + select(0x6a3a9047u, 0x33eeb746u, ((sel >> 24u) & 1u) != 0u); // s66 add + r7 = r7 + r4 + select(0x4e0c939du, 0x27aae05fu, ((sel >> 22u) & 1u) != 0u); // s67 add + r1 = r1 ^ r2; // s68 xor + r5 = r5 | r1; // s69 or + r4 = r4 - r2; // s70 sub + r7 = r7 + r5 + select(0x44e0e964u, 0x9e39c430u, ((sel >> 2u) & 1u) != 0u); // s71 add + r4 = mulhi(r4, r6); // s72 mulhi + r7 = r7 - r6; // s73 sub + r7 = r7 * r3; // s74 mul + r5 = r1 * r5 + r5; // s75 mad + r0 = r0 - r6; // s76 sub + r1 = mulhi(r1, r0); // s77 mulhi + r2 = mulhi(r2, r6); // s78 mulhi + r7 = r6 * r4 + r7; // s79 mad + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)2); // s80 shfl + r2 = r0 * r4 + r2; // s81 mad + r0 = r0 + r5 + select(0x61f3d247u, 0xc3a9acb8u, ((sel >> 21u) & 1u) != 0u); // s82 add + r3 = r3 - r5; // s83 sub + r2 = r2 ^ simd_shuffle_xor(r3, (ushort)16); // s84 shfl + r3 = r3 ^ simd_shuffle_xor(r7, (ushort)8); // s85 shfl + r1 = r1 + r5 + select(0x693f4b88u, 0x8aac6339u, ((sel >> 29u) & 1u) != 0u); // s86 add + r1 = r1 - r2; // s87 sub + r7 = rotr_var(r7, r4); // s88 rotr + r4 = r4 ^ simd_shuffle_xor(r7, (ushort)8); // s89 shfl + r4 = r4 ^ r1; // s90 xor + r1 = r1 ^ simd_shuffle_xor(r3, (ushort)1); // s91 shfl + r0 = r0 * r5; // s92 mul + r5 = rotr_var(r5, r4); // s93 rotr + r0 = mulhi(r0, r3); // s94 mulhi + r2 = rotl_imm(r2, 5u); // s95 rotl + r5 = r5 ^ simd_shuffle_xor(r4, (ushort)4); // s96 shfl + r6 = r6 ^ simd_shuffle_xor(r5, (ushort)1); // s97 shfl + r6 = rotl_imm(r6, 14u); // s98 rotl + r7 = r7 - r2; // s99 sub + r2 = r1 * r7 + r2; // s100 mad + r3 = r3 * r0; // s101 mul + r0 = r3 * r5 + r0; // s102 mad + r0 = r0 + r6 + select(0x7c3da932u, 0x227996ecu, ((sel >> 23u) & 1u) != 0u); // s103 add + r1 = r1 + r0 + select(0x7f163b1bu, 0x924ae879u, ((sel >> 31u) & 1u) != 0u); // s104 add + r3 = rotl_imm(r3, 8u); // s105 rotl + r0 = rotr_var(r0, r4); // s106 rotr + r4 = r4 * r0; // s107 mul + r0 = r6 * r6 + r0; // s108 mad + r0 = r3 * r1 + r0; // s109 mad + r7 = rotr_var(r7, r4); // s110 rotr + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)4); // s111 shfl + r5 = r5 * r3; // s112 mul + r2 = r2 * r7; // s113 mul + r5 = rotl_imm(r5, 16u); // s114 rotl + r6 = mulhi(r6, r2); // s115 mulhi + r0 = rotl_imm(r0, 5u); // s116 rotl + r2 = r2 * r7; // s117 mul + r4 = r4 + r2 + select(0xa288a176u, 0x21e83993u, ((sel >> 15u) & 1u) != 0u); // s118 add + r1 = r1 ^ r0; // s119 xor + r2 = rotl_imm(r2, 26u); // s120 rotl + r0 = r0 + r4 + select(0x9df51761u, 0x0f2327f2u, ((sel >> 10u) & 1u) != 0u); // s121 add + r1 = r1 ^ simd_shuffle_xor(r7, (ushort)1); // s122 shfl + r7 = rotr_var(r7, r2); // s123 rotr + r7 = r7 + r0 + select(0x19c0a4f8u, 0x2ebd98a2u, ((sel >> 7u) & 1u) != 0u); // s124 add + r0 = r5 * r3 + r0; // s125 mad + r0 = r0 ^ r4; // s126 xor + r1 = r1 ^ simd_shuffle_xor(r4, (ushort)16); // s127 shfl + r5 = rotl_imm(r5, 21u); // s128 rotl + r4 = r4 - r0; // s129 sub + r5 = r5 ^ r0; // s130 xor + r7 = r6 * r3 + r7; // s131 mad + r5 = r6 * r6 + r5; // s132 mad + r6 = r6 ^ r2; // s133 xor + r6 = mulhi(r6, r5); // s134 mulhi + r5 = r5 + r4 + select(0xd49ef2cfu, 0x70024b77u, ((sel >> 9u) & 1u) != 0u); // s135 add + r4 = r4 ^ r2; // s136 xor + r0 = r0 + r5 + select(0x96954048u, 0x4c39b70bu, ((sel >> 3u) & 1u) != 0u); // s137 add + r2 = r2 ^ r4; // s138 xor + r4 = r4 + r0 + select(0x5b35ff4au, 0x3c3cdf42u, ((sel >> 9u) & 1u) != 0u); // s139 add + r5 = rotl_imm(r5, 10u); // s140 rotl + r5 = r5 | r1; // s141 or + r4 = r4 * r3; // s142 mul + r6 = r6 + r4 + select(0xc2137621u, 0x0b3bd787u, ((sel >> 31u) & 1u) != 0u); // s143 add + r5 = r5 ^ r1; // s144 xor + r0 = rotl_imm(r0, 27u); // s145 rotl + r2 = r2 - r5; // s146 sub + r2 = rotl_imm(r2, 21u); // s147 rotl + r0 = r0 + r1 + select(0xaf6409eau, 0x7f3d99bfu, ((sel >> 28u) & 1u) != 0u); // s148 add + r6 = r6 ^ r5; // s149 xor + r2 = r2 * r1; // s150 mul + r3 = mulhi(r3, r5); // s151 mulhi + r4 = r4 ^ r2; // s152 xor + r5 = rotl_imm(r5, 16u); // s153 rotl + r7 = r7 * r5; // s154 mul + r7 = r0 * r5 + r7; // s155 mad + r3 = r7 * r0 + r3; // s156 mad + r1 = r1 - r6; // s157 sub + r3 = r3 + r4 + select(0xbf35527cu, 0x084ad732u, ((sel >> 4u) & 1u) != 0u); // s158 add + r3 = r3 | r1; // s159 or + r4 = r4 ^ r7; // s160 xor + r5 = r5 ^ r4; // s161 xor + r0 = rotl_imm(r0, 2u); // s162 rotl + r1 = r1 - r4; // s163 sub + r3 = r3 ^ r6; // s164 xor + r3 = mulhi(r3, r0); // s165 mulhi + r6 = r6 ^ r2; // s166 xor + r6 = r6 * r0; // s167 mul + r1 = r1 + r0 + select(0x4d9683b5u, 0x9e1aa79bu, ((sel >> 11u) & 1u) != 0u); // s168 add + r3 = r5 * r1 + r3; // s169 mad + r2 = r2 ^ r3; // s170 xor + r0 = r0 + r7 + select(0xa33023afu, 0x47f22138u, ((sel >> 18u) & 1u) != 0u); // s171 add + r3 = r3 + r4 + select(0xb4c0dd62u, 0xb4561a0cu, ((sel >> 17u) & 1u) != 0u); // s172 add + r3 = r3 * r0; // s173 mul + r4 = r4 ^ simd_shuffle_xor(r6, (ushort)2); // s174 shfl + r4 = r4 + r2 + select(0xc9a1b546u, 0x50dcdd8du, ((sel >> 18u) & 1u) != 0u); // s175 add + r6 = r6 + r1 + select(0x6d7dd3a8u, 0xeb88782du, ((sel >> 16u) & 1u) != 0u); // s176 add + r2 = r2 - r7; // s177 sub + r0 = r2 * r2 + r0; // s178 mad + r0 = r0 * r2; // s179 mul + r0 = r5 * r0 + r0; // s180 mad + r1 = r1 - r7; // s181 sub + r6 = r6 ^ r4; // s182 xor + r6 = r6 - r1; // s183 sub + r0 = r4 * r2 + r0; // s184 mad + r2 = mulhi(r2, r7); // s185 mulhi + r0 = r0 ^ r1; // s186 xor + r4 = r4 + r0 + select(0xf5421b9au, 0x15f552efu, ((sel >> 2u) & 1u) != 0u); // s187 add + r4 = r2 * r5 + r4; // s188 mad + r7 = rotr_var(r7, r0); // s189 rotr + r0 = r0 * r2; // s190 mul + r0 = r0 ^ r2; // s191 xor + r4 = rotr_var(r4, r5); // s192 rotr + r3 = r3 ^ r6; // s193 xor + r1 = r1 | r5; // s194 or + r2 = rotr_var(r2, r3); // s195 rotr + r6 = rotl_imm(r6, 1u); // s196 rotl + r3 = rotr_var(r3, r6); // s197 rotr + r7 = r3 * r2 + r7; // s198 mad + r0 = r0 - r3; // s199 sub + r6 = r6 ^ r7; // s200 xor + r1 = r1 + r3 + select(0x1c29c85bu, 0xda481a5du, ((sel >> 15u) & 1u) != 0u); // s201 add + r5 = r5 * r3; // s202 mul + r5 = mulhi(r5, r0); // s203 mulhi + r5 = r5 ^ r3; // s204 xor + r6 = r6 + r0 + select(0x7975e016u, 0xbff40052u, ((sel >> 15u) & 1u) != 0u); // s205 add + r7 = r7 ^ r1; // s206 xor + r2 = r2 ^ r5; // s207 xor + r4 = r4 | r2; // s208 or + r4 = mulhi(r4, r0); // s209 mulhi + r7 = r7 - r5; // s210 sub + r7 = r4 * r4 + r7; // s211 mad + r0 = r0 ^ r3; // s212 xor + r3 = r3 + r4 + select(0x57f3f8acu, 0xb1f05c54u, ((sel >> 24u) & 1u) != 0u); // s213 add + r2 = rotl_imm(r2, 12u); // s214 rotl + r5 = r5 ^ r2; // s215 xor + r1 = rotr_var(r1, r4); // s216 rotr + r5 = r5 ^ simd_shuffle_xor(r0, (ushort)8); // s217 shfl + r3 = r3 | r6; // s218 or + r0 = r0 ^ simd_shuffle_xor(r2, (ushort)4); // s219 shfl + r0 = r0 ^ simd_shuffle_xor(r3, (ushort)1); // s220 shfl + r4 = r4 | r7; // s221 or + r6 = r6 * r5; // s222 mul + r4 = r4 ^ simd_shuffle_xor(r3, (ushort)8); // s223 shfl + r4 = r4 + r2 + select(0xa0235028u, 0x1023c67eu, ((sel >> 3u) & 1u) != 0u); // s224 add + r6 = rotl_imm(r6, 10u); // s225 rotl + r2 = r2 ^ r0; // s226 xor + r1 = r0 * r6 + r1; // s227 mad + r2 = r2 + r0 + select(0xf2e2fbbau, 0x410d0f7au, ((sel >> 17u) & 1u) != 0u); // s228 add + r2 = rotr_var(r2, r6); // s229 rotr + r5 = rotr_var(r5, r6); // s230 rotr + r6 = r6 - r0; // s231 sub + r5 = r7 * r7 + r5; // s232 mad + r3 = r3 ^ r2; // s233 xor + r2 = r2 ^ r4; // s234 xor + r1 = rotl_imm(r1, 4u); // s235 rotl + r3 = r3 ^ simd_shuffle_xor(r4, (ushort)4); // s236 shfl + r7 = r7 ^ r6; // s237 xor + r4 = r4 * r3; // s238 mul + r0 = mulhi(r0, r7); // s239 mulhi + r4 = r4 ^ r7; // s240 xor + r0 = r0 + r7 + select(0xf495035bu, 0x90b2f1c9u, ((sel >> 1u) & 1u) != 0u); // s241 add + r5 = r5 + r1 + select(0xad76bafbu, 0x43fe7580u, ((sel >> 19u) & 1u) != 0u); // s242 add + r1 = rotr_var(r1, r0); // s243 rotr + r7 = r7 ^ simd_shuffle_xor(r5, (ushort)2); // s244 shfl + r4 = r4 * r5; // s245 mul + r6 = r6 + r5 + select(0x7b0d685du, 0xa1eaac90u, ((sel >> 23u) & 1u) != 0u); // s246 add + r7 = r7 * r6; // s247 mul + r6 = rotl_imm(r6, 2u); // s248 rotl + r2 = r2 - r6; // s249 sub + r4 = r4 | r2; // s250 or + r2 = r2 + r1 + select(0x14c6d26au, 0xca0faca7u, ((sel >> 26u) & 1u) != 0u); // s251 add + r5 = r5 ^ r6; // s252 xor + r4 = r4 | r6; // s253 or + r2 = r2 + r6 + select(0x5c6e41f5u, 0xf887f9eau, ((sel >> 14u) & 1u) != 0u); // s254 add + r7 = r7 + r6 + select(0x9389bb50u, 0x1eeb32d4u, ((sel >> 19u) & 1u) != 0u); // s255 add } } uint lo = r0 ^ rotl_imm(r1, 7u) ^ rotl_imm(r2, 14u) ^ rotl_imm(r3, 21u); diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/vectors.h b/proto-cuda/packs-ca3-v4/v4-era-5/vectors.h index 58dfa5e27..5a350aa80 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/vectors.h +++ b/proto-cuda/packs-ca3-v4/v4-era-5/vectors.h @@ -11,22 +11,22 @@ static const uint32_t IGNEUM_VEC_BASE[IGNEUM_VEC_WARPS] = { 0u, 4096u, 1000000u }; static const uint64_t IGNEUM_VEC_OUT[IGNEUM_VEC_WARPS][32] = { { // base nonce 0 - 0xbf945be0cc8d3f41ull, 0x34be8a9b058957efull, 0xa790f250cb3f84c2ull, 0xf348a3adcb120feeull, 0x84ffe7a18320fce6ull, 0xc3ca0cd342a7b5a0ull, 0xc661be2913cc0a16ull, 0x42a2613074355476ull, - 0x652f7593de7c1c6bull, 0x8b82eec6d8a4cdb5ull, 0x64a052482e4aa45aull, 0x945d11e95d050e91ull, 0x9922b0bf0a9b65afull, 0xa6a46d687a41eea8ull, 0x1cd22c7c5a116cadull, 0x3bb0fe59f1d68bb0ull, - 0x392c2e38402ce2ceull, 0xce206717bf858f7bull, 0x725267c1b0a569c1ull, 0xb1a10c27e394a06cull, 0x8694ba08f13dadcaull, 0x9f6e2f304e7f8410ull, 0xfca54880fe409efbull, 0x8ddf5d9f26f6651aull, - 0x7744b0375f6a5356ull, 0x2ec062f98cea9669ull, 0x1fc1df8a93493c01ull, 0xe58efdbe3b0fded0ull, 0xbc80f43278e4a3aeull, 0xc576991cd263499bull, 0x6a964020bdafa9caull, 0x23d6a9f3a43b088bull + 0x09b672f51efc0de3ull, 0xf2dccfa4f0c48205ull, 0xff2e372fc9e428c7ull, 0x4f418be1eebc6edcull, 0xf849f2d2026d36f4ull, 0xd729cf8343a3591eull, 0xeec06910859dd6abull, 0xfb8b914da3779d31ull, + 0x2b5304d0be44433cull, 0xdcca0269e2b059d3ull, 0x4f1e5ce8d1507341ull, 0x3682600cec1f1766ull, 0xbfc1066c9dd82bc0ull, 0x0351c44e542e1dd7ull, 0x3781ab53ea2c921dull, 0x71c128dc463c82aaull, + 0x868fad6f922dee40ull, 0xb1cfac97f6caa4c8ull, 0xdf643330b77c6a41ull, 0xa558c8b2882aeae6ull, 0x7e230132b2641114ull, 0xaa4e270fa835e5aeull, 0x046954e5c42edd61ull, 0x7830c56c8783a76eull, + 0x559e1b4a7657067eull, 0x348f31d5c06af0b6ull, 0xf485c0b354cf7c02ull, 0x1e1812064c56d4adull, 0x38e167a0619086b2ull, 0x76dfbdc488dadeabull, 0x3c1deadede40f091ull, 0x0394095a4407e1a7ull }, { // base nonce 4096 - 0x39a9f8aba6a9c7abull, 0xf1daab939a9c3217ull, 0x5831fcce18c03b2full, 0xb8ff659519b96eedull, 0x88d08144f09ffb22ull, 0xa373485c22133291ull, 0xfc82bfd2743de9dbull, 0x19dffd993bf1a1a3ull, - 0xec61385b02ed1eecull, 0xe3a705fedd476c62ull, 0x012af0af0abd2f1bull, 0xacbfc40c16d1c409ull, 0x64e16756a429ee6aull, 0x9a8b8c542b85d64bull, 0x95b962ec795480c1ull, 0x11a35a7657f86c66ull, - 0x4ae11f4a8b22a8edull, 0x649bd0de4210bbb2ull, 0xd9e81d1e0c794619ull, 0x865a6073aeaad870ull, 0xcc691a4eb315ed94ull, 0x7bdf6b0662f171e6ull, 0xde979c126cd8b9a8ull, 0x801a11f95defd5baull, - 0xe0b160c42c39df59ull, 0x2319e68444cacb1bull, 0xd8beee32eb63a71eull, 0x272e524e202c58dbull, 0xeefad04ef941e833ull, 0x98b08bb5658177b1ull, 0xeb6833af292f958eull, 0xb6b358ffd3b2de03ull + 0xd9d5853a2725f19dull, 0x21c81049ecbd4d29ull, 0xf653e706783ae115ull, 0x603d659acca394e6ull, 0xb745e16d6c892d1cull, 0x27fa4d447e00e11aull, 0x6dd506e5ae5db762ull, 0xac81179a42900fbcull, + 0xb195ff53ff98ef62ull, 0x352788b01afe6ce4ull, 0xdf03be2ea64bdf46ull, 0x0ce8624292198824ull, 0x4bb97c06c80a223dull, 0xafe3281cc1b73d36ull, 0xffd481485e92f966ull, 0xc765d569c51a05fbull, + 0x53a196baa4ffea59ull, 0x716beca58384cca9ull, 0xb7a316314e9fd227ull, 0xd01e7f8388fcf7a6ull, 0x935487bb0b0571e8ull, 0x11d0ff59e26a7a8full, 0x1aa067d06337b21eull, 0x26c12160dd40a1e9ull, + 0x645acfa37986187eull, 0xab7a9ff989cfb2c7ull, 0x70b6fe65e7e401e7ull, 0xb25f11139009a81bull, 0xf75be58f6dd7a15dull, 0x3584f9e3564a5543ull, 0x164f8896c4e05878ull, 0xe4f16a4f44241ba8ull }, { // base nonce 1000000 - 0xb4835ddebdbfbaebull, 0x05ececfd8ef508ccull, 0x4bc1315c1b1ce4c8ull, 0xe13eca621f2ff598ull, 0x6fffb12762010b6cull, 0x78139a212e0870eeull, 0xe9e197bebebbce63ull, 0xb485f4c5f50377bdull, - 0x1284446e016546c1ull, 0xa2e4a3aefd217a73ull, 0xa484b974f813abb7ull, 0xf9959eac63a1401cull, 0x77b081fd93294af8ull, 0x1fc7fc1eb3d9eaabull, 0x71c51d4214cb47f0ull, 0x52171833d8d341f0ull, - 0x5699e6eae25c5854ull, 0x34752dd16c6ce88full, 0x353dd3b0890ba109ull, 0x696b0afc8f6fe70eull, 0x2b30eaa48b77cd0cull, 0x6c600c3b87409c38ull, 0x26ead9ba20d15168ull, 0xc93e5f5a261bc786ull, - 0x8606f09c2c74c81cull, 0x1b3f9792e5247d66ull, 0xf8bb901d0dd87bfaull, 0xbc939e016a57b734ull, 0x7bbbffc2dbcbc12aull, 0x51beb5108f2ae2a4ull, 0x37b252067e6cc262ull, 0xf038a9ff99426f88ull + 0xafcf44b9ddaf8a15ull, 0x46b501d8f9f431b1ull, 0x2ec68d35b7cb4f0dull, 0x930277e6f96503f8ull, 0x04012d08740f5375ull, 0x4a85d90295660fc6ull, 0x0454298d466b3e4bull, 0xf3a12e9c69494a50ull, + 0x4a8e4403615aa782ull, 0x371e05fc40aec842ull, 0x4407fb731b817a1eull, 0x09bf85431cb945b4ull, 0x98dff2c22d85fca4ull, 0x8bc87a1270192ff2ull, 0xc932770bddffbbdbull, 0xc3d77a3970b22ad8ull, + 0xab49bef1f1cfb902ull, 0x9a8510f1cf68d61eull, 0xeaed05116410b7f9ull, 0x7c2b51cd65104673ull, 0x119a5eb9c83a77b2ull, 0x5f5beff134efc338ull, 0x0237683bc1e164d6ull, 0x78190827639863a6ull, + 0x61ed474c83daf076ull, 0x1b3a63821bb12c47ull, 0x06afe302e22adad3ull, 0xcabee617ba70eeedull, 0x8a03503b613450ceull, 0x5c32f39e46586c19ull, 0x1b358dd2b58de723ull, 0x9226092b153a990aull } }; diff --git a/proto-cuda/packs-ca3-v4/v4-era-5/vectors.json b/proto-cuda/packs-ca3-v4/v4-era-5/vectors.json index 197245d50..b3dfa3d47 100644 --- a/proto-cuda/packs-ca3-v4/v4-era-5/vectors.json +++ b/proto-cuda/packs-ca3-v4/v4-era-5/vectors.json @@ -8,22 +8,22 @@ "source": "igneum-pow (Rust) CPU interpreter, generator v4, memory-hard dataset", "warps": [ {"base_nonce": 0, "expected": [ - "0xbf945be0cc8d3f41", "0x34be8a9b058957ef", "0xa790f250cb3f84c2", "0xf348a3adcb120fee", "0x84ffe7a18320fce6", "0xc3ca0cd342a7b5a0", "0xc661be2913cc0a16", "0x42a2613074355476", - "0x652f7593de7c1c6b", "0x8b82eec6d8a4cdb5", "0x64a052482e4aa45a", "0x945d11e95d050e91", "0x9922b0bf0a9b65af", "0xa6a46d687a41eea8", "0x1cd22c7c5a116cad", "0x3bb0fe59f1d68bb0", - "0x392c2e38402ce2ce", "0xce206717bf858f7b", "0x725267c1b0a569c1", "0xb1a10c27e394a06c", "0x8694ba08f13dadca", "0x9f6e2f304e7f8410", "0xfca54880fe409efb", "0x8ddf5d9f26f6651a", - "0x7744b0375f6a5356", "0x2ec062f98cea9669", "0x1fc1df8a93493c01", "0xe58efdbe3b0fded0", "0xbc80f43278e4a3ae", "0xc576991cd263499b", "0x6a964020bdafa9ca", "0x23d6a9f3a43b088b" + "0x09b672f51efc0de3", "0xf2dccfa4f0c48205", "0xff2e372fc9e428c7", "0x4f418be1eebc6edc", "0xf849f2d2026d36f4", "0xd729cf8343a3591e", "0xeec06910859dd6ab", "0xfb8b914da3779d31", + "0x2b5304d0be44433c", "0xdcca0269e2b059d3", "0x4f1e5ce8d1507341", "0x3682600cec1f1766", "0xbfc1066c9dd82bc0", "0x0351c44e542e1dd7", "0x3781ab53ea2c921d", "0x71c128dc463c82aa", + "0x868fad6f922dee40", "0xb1cfac97f6caa4c8", "0xdf643330b77c6a41", "0xa558c8b2882aeae6", "0x7e230132b2641114", "0xaa4e270fa835e5ae", "0x046954e5c42edd61", "0x7830c56c8783a76e", + "0x559e1b4a7657067e", "0x348f31d5c06af0b6", "0xf485c0b354cf7c02", "0x1e1812064c56d4ad", "0x38e167a0619086b2", "0x76dfbdc488dadeab", "0x3c1deadede40f091", "0x0394095a4407e1a7" ]}, {"base_nonce": 4096, "expected": [ - "0x39a9f8aba6a9c7ab", "0xf1daab939a9c3217", "0x5831fcce18c03b2f", "0xb8ff659519b96eed", "0x88d08144f09ffb22", "0xa373485c22133291", "0xfc82bfd2743de9db", "0x19dffd993bf1a1a3", - "0xec61385b02ed1eec", "0xe3a705fedd476c62", "0x012af0af0abd2f1b", "0xacbfc40c16d1c409", "0x64e16756a429ee6a", "0x9a8b8c542b85d64b", "0x95b962ec795480c1", "0x11a35a7657f86c66", - "0x4ae11f4a8b22a8ed", "0x649bd0de4210bbb2", "0xd9e81d1e0c794619", "0x865a6073aeaad870", "0xcc691a4eb315ed94", "0x7bdf6b0662f171e6", "0xde979c126cd8b9a8", "0x801a11f95defd5ba", - "0xe0b160c42c39df59", "0x2319e68444cacb1b", "0xd8beee32eb63a71e", "0x272e524e202c58db", "0xeefad04ef941e833", "0x98b08bb5658177b1", "0xeb6833af292f958e", "0xb6b358ffd3b2de03" + "0xd9d5853a2725f19d", "0x21c81049ecbd4d29", "0xf653e706783ae115", "0x603d659acca394e6", "0xb745e16d6c892d1c", "0x27fa4d447e00e11a", "0x6dd506e5ae5db762", "0xac81179a42900fbc", + "0xb195ff53ff98ef62", "0x352788b01afe6ce4", "0xdf03be2ea64bdf46", "0x0ce8624292198824", "0x4bb97c06c80a223d", "0xafe3281cc1b73d36", "0xffd481485e92f966", "0xc765d569c51a05fb", + "0x53a196baa4ffea59", "0x716beca58384cca9", "0xb7a316314e9fd227", "0xd01e7f8388fcf7a6", "0x935487bb0b0571e8", "0x11d0ff59e26a7a8f", "0x1aa067d06337b21e", "0x26c12160dd40a1e9", + "0x645acfa37986187e", "0xab7a9ff989cfb2c7", "0x70b6fe65e7e401e7", "0xb25f11139009a81b", "0xf75be58f6dd7a15d", "0x3584f9e3564a5543", "0x164f8896c4e05878", "0xe4f16a4f44241ba8" ]}, {"base_nonce": 1000000, "expected": [ - "0xb4835ddebdbfbaeb", "0x05ececfd8ef508cc", "0x4bc1315c1b1ce4c8", "0xe13eca621f2ff598", "0x6fffb12762010b6c", "0x78139a212e0870ee", "0xe9e197bebebbce63", "0xb485f4c5f50377bd", - "0x1284446e016546c1", "0xa2e4a3aefd217a73", "0xa484b974f813abb7", "0xf9959eac63a1401c", "0x77b081fd93294af8", "0x1fc7fc1eb3d9eaab", "0x71c51d4214cb47f0", "0x52171833d8d341f0", - "0x5699e6eae25c5854", "0x34752dd16c6ce88f", "0x353dd3b0890ba109", "0x696b0afc8f6fe70e", "0x2b30eaa48b77cd0c", "0x6c600c3b87409c38", "0x26ead9ba20d15168", "0xc93e5f5a261bc786", - "0x8606f09c2c74c81c", "0x1b3f9792e5247d66", "0xf8bb901d0dd87bfa", "0xbc939e016a57b734", "0x7bbbffc2dbcbc12a", "0x51beb5108f2ae2a4", "0x37b252067e6cc262", "0xf038a9ff99426f88" + "0xafcf44b9ddaf8a15", "0x46b501d8f9f431b1", "0x2ec68d35b7cb4f0d", "0x930277e6f96503f8", "0x04012d08740f5375", "0x4a85d90295660fc6", "0x0454298d466b3e4b", "0xf3a12e9c69494a50", + "0x4a8e4403615aa782", "0x371e05fc40aec842", "0x4407fb731b817a1e", "0x09bf85431cb945b4", "0x98dff2c22d85fca4", "0x8bc87a1270192ff2", "0xc932770bddffbbdb", "0xc3d77a3970b22ad8", + "0xab49bef1f1cfb902", "0x9a8510f1cf68d61e", "0xeaed05116410b7f9", "0x7c2b51cd65104673", "0x119a5eb9c83a77b2", "0x5f5beff134efc338", "0x0237683bc1e164d6", "0x78190827639863a6", + "0x61ed474c83daf076", "0x1b3a63821bb12c47", "0x06afe302e22adad3", "0xcabee617ba70eeed", "0x8a03503b613450ce", "0x5c32f39e46586c19", "0x1b358dd2b58de723", "0x9226092b153a990a" ]} ], "dataset_head": ["0x19c6837f", "0xdf3adfb8", "0xbd3f6aed", "0xb8bede0d", "0xc5f0629f", "0x03e38ae8", "0xc435a60e", "0xfadee916", "0x827e59af", "0x8cf592f5", "0x60286061", "0x5d9abc1c", "0xa85d0c39", "0x4247a100", "0xd41a5b0d", "0x3f33dc64"], diff --git a/relay/README.md b/relay/README.md index 4fdad445a..4b319e7e2 100644 --- a/relay/README.md +++ b/relay/README.md @@ -22,9 +22,29 @@ Mac: `node tools/console.mjs post --kind log --title "..." --body "..."` writes The app log (label `win-` or `mac-`) reaches the intake since b8b349a (4 Oct 2026, 0.3.3); apps before that show `app ?`. The parsers (labels, miner tail, app tail, the stale mark) live in `relay/lib/parse.mjs` with no dependencies, and `relay/lib/auth.mjs` holds the constant-time secret compare; `node --test relay/test/parse.test.mjs relay/test/auth.test.mjs` runs their tests, and CI runs them in the site job. -## The secret is the path +## The secrets, since 5 October 2026 (night): three tiers, headers, no token in a URL -The web page lives at `/r//` and every API call sits under `/r//api/`. The token is 20 base32 characters generated once and stored at `~/.config/igneum/relay-token` on the Mac (and as `RELAY_TOKEN` in the project). Anyone with the link can read and post, so the link stays with the project lead. Scripts may present the log intake key in `x-igneum-key` instead (`RELAY_KEY`, the same value as `~/.config/igneum/log-intake-key`). There is no other login. Blob file URLs carry a random segment and a random suffix; they are not listed anywhere. +| Secret | Where it lives | Sent as | May | +|---|---|---|---| +| the console token (20 base32 characters) | `~/.config/igneum/relay-token`, `RELAY_TOKEN` on the project | the `x-relay-token` header from every tool and client; the URL path `/r//` only for the phone's page (`ui.html`) and the calls that page makes (`/r//api/`, `/r//c/`, `/r//wake`) | everything, except that a `run` task also needs the run signature below | +| the relay key (48 characters, the relay's own since 4 October 2026) | `~/.config/igneum/relay-key`, `RELAY_KEY` | `x-igneum-key` | read the feed, items, files, inbox, machines; post notes, files, results; register; ack; done. Never `task`, `run`, `name`, `role`, `secret`, `delete` | +| the log-intake key (inside every shipped package) | `LOG_INTAKE_KEY`, `LOG_INTAKE_KEY_NEXT` | `x-igneum-key` | only `upload` and a `drop` of kind `file` or `text`: the PC apps' build-job outputs (`jobrun.rs`). No reads, no results, nothing else. `RELAY_INTAKE_COMPAT=0` on the project closes this tier once the apps carry a relay key of their own | +| the run key (Ed25519, `node tools/relay.mjs keygen`) | `~/.config/igneum/relay-run-key` (seed, 0600) and `.pub`; the public half as `RELAY_RUN_PUB` on the project | `flags.sig` on every `run` task, over the canonical text in `relay/lib/guard.mjs` (`runCanon`: machine, nonce, body sha256, the elevated, reboot_continue and reboot flags) | without a verifying signature the relay answers 401 to a `run`; without `RELAY_RUN_PUB` every `run` is refused | +| a machine secret per PC (64 hex, `node tools/relay.mjs secret PC1`) | `~/.config/igneum/relay-machines/` on the Mac; `machine-secret.txt` beside the agent on that PC (from `make-clients.sh --machine`); its sha256 on the relay (`relay_machines.secret_hash`) | `x-machine-secret` on `register`, `result`, `done`; `flags.mac` on every `run` (an HMAC-SHA256 tag the agent verifies before it executes, because Windows PowerShell 5.1 has no Ed25519) | a result's `from` is the machine the secret proves (a mismatch is 403); a bound hostname cannot register without it; the agent runs nothing whose tag does not verify, and never the same nonce twice | + +Review round 4 (X23) found one tier with every power: the intake key inside every package queued PowerShell on PC 1 as administrator. Now the token alone cannot queue a `run` either: the Mac signs it with the run key (checked by the relay) and tags it with the target's secret (checked by the agent). Compare is constant time (`lib/auth.mjs`). Blob file URLs carry a random segment and a random suffix; they are not listed anywhere. 120 calls a minute per IP, 10 failed authentications a minute per IP, then 429. + +### Rotation (what each secret's change breaks, and the order) + +| Rotate | How | What stops, until | Order | +|---|---|---|---| +| the console token | new value in `~/.config/igneum/relay-token` and `RELAY_TOKEN`; a new zip per PC (`make-clients.sh --machine`) carried by hand; the phone gets the new link | every PC client and the phone page, until the new zip and link are in place; the Mac tools at once (they read the file) | any time; the old zip on a PC is dead the moment the project env changes | +| the relay key | new value in `relay-key` and `RELAY_KEY`; new zips | the PC clients' reads and reports until the new zip; `tools/build-job.mjs` falls back to the token | with the token, same zip | +| the intake key | `LOG_INTAKE_KEY_NEXT` on the relay AND the site intake first, repackage every app with the next key (`packaged-config.sh`), publish; then move `_NEXT` to `LOG_INTAKE_KEY`; then `RELAY_INTAKE_COMPAT=0` once no shipped app uploads build outputs with it | build-job uploads from every app that still carries the old key; log uploads from every shipped package until it updates | the long one: apps update over days, so both values are accepted during the window (`docs/plans/rotation-phase-2.md`) | +| the run key | `node tools/relay.mjs keygen` after moving the old `relay-run-key` aside; `RELAY_RUN_PUB` on the project | every `run` queued with the old key is refused at the relay; nothing on a PC changes (the PCs hold no run key) | any time, in one step | +| a machine secret | `node tools/relay.mjs secret PC1 --rotate` (rebinds the sha256), `make-clients.sh --machine PC1`, carry the zip | that PC's results and registration until the new zip is there; queued `run` tasks tagged with the old secret are refused by the agent | per machine, any time | + +What the 5 October rotation already did: the relay token (4 October), the intake key and the dl token (`.old-2026-10-05` beside the live files). What is still the project lead's: the hosted `igneum-relay-clients.zip` off the downloads host (it holds the old token and key; dead values now, but the file is the shape X23 names), `RELAY_RUN_PUB` on the project after `keygen`, one `secret` per PC and the zips carried by hand. ## What is stored where @@ -33,49 +53,62 @@ The web page lives at `/r//` and every API call sits under `/r//ap | Items (text, title, who, kind, flags, read and done marks) | Neon table `relay_items` (database `igneum`) | body 1 MB | | Machines (name, hostname, role, GPU and WSL facts, last seen) | Neon table `relay_machines` | | | Files | Vercel Blob store `igneum-relay` (public URLs with random path and suffix, London) | 50 MB per file through a client token; 4 MB when pushed through the function | -| The token and key | `~/.config/igneum/relay-token`, `~/.config/igneum/relay-key` (the relay's own key since 4 October 2026, round 4 X23; the log-intake key no longer opens the relay); project env | never in the repo | +| The token and keys | `~/.config/igneum/relay-token`, `relay-key`, `relay-run-key`, `relay-machines/`; project env (`RELAY_TOKEN`, `RELAY_KEY`, `RELAY_RUN_PUB`, `LOG_INTAKE_KEY`, `LOG_INTAKE_KEY_NEXT`) | never in the repo | +| Retention | rows older than 30 days are deleted with their blobs, checked on a feed read at most every 10 minutes per instance; `delete` removes the blob with the row (X26) | 30 days | -Kinds: `text` (a note), `file`, `task` (for a person or a Claude session on a PC), `run` (a script the agent executes), `result` (what a task produced, linked by `task_id`). Roles: `miner`, `prover`, `bench`, `mac`, `phone`. +Kinds: `text` (a note), `file`, `task` (for a person or a Claude session on a PC), `run` (a script the agent executes; signed and tagged, see above), `result` (what a task produced, linked by `task_id`; `from` is the machine the secret proves, `flags.unbound` marks one from a machine with no secret yet). Roles: `miner`, `prover`, `bench`, `mac`, `phone`. -## API (all under `/r//api/`) +## API (`/api/relay?fn=` with the headers above; `/r//api/` from the phone's page only) | Call | Does | |---|---| -| `GET feed?since=&before=&machine=&limit=` | items newest first (200 by default) plus every machine with its unread count | +| `GET feed?since=&before=&machine=&limit=` | items newest first (50 by default, 100 at most) plus every machine with its unread count and whether it is bound | | `GET item?id=` | one item with its full body | | `GET file?id=[&download=1]` | 302 to the file | -| `GET inbox?machine=PC1&kind=run|task&ack=1` | unread, not done tasks for that machine; `ack=1` marks them read | -| `GET machines` | names, roles, hostnames, last seen | -| `POST drop` | JSON `{from,to,kind,title,body,file_name,file_url,size,task_id,flags}`; or raw bytes with `Content-Type: application/octet-stream` and `x-file-name` (4 MB cap) | -| `POST task` | same fields; `kind` `task` or `run`; `run` needs one named machine and flags `{elevated, reboot_continue}` | +| `GET inbox?machine=PC1&kind=run|task` | unread, not done tasks for that machine; a GET never marks anything | +| `POST inbox {machine, kind, ack:true}` | the same list, marked read (the agents use this) | +| `GET machines` | names, roles, hostnames, last seen, bound | +| `POST drop` | JSON `{from,to,kind,title,body,file_name,file_url,size,task_id,flags}`; or raw bytes with `Content-Type: application/octet-stream` and `x-file-name` (4 MB cap). A `result` needs `x-machine-secret` when its machine is bound | +| `POST task` | same fields; `kind` `task` or `run`; `run` needs one named machine and `flags {elevated, reboot_continue, reboot, nonce, sig, mac}`; `tools/relay.mjs run` fills the last three in. 401 without a verifying `sig`, 409 on a reused nonce | | `POST upload` | `{name,size}` returns a one-hour Blob client token and `put_url`; PUT the bytes there, then `drop` with the returned `url` | -| `POST ack {ids}` `POST done {id,exit_code}` `POST delete {id}` | marks | -| `POST register {hostname,info}` | a machine checks in; returns its name, role and whether it is named | -| `POST name {hostname,name}` `POST role {name,role}` | naming and roles, from the Mac | +| `POST ack {ids}` `POST done {id,exit_code}` `POST delete {id}` | marks; `delete` takes the blob with the row (token only) | +| `POST register {hostname,info}` | a machine checks in; with `x-machine-secret` the secret names it whatever the hostname says (both PCs report DESKTOP-KMCV30N); `info.user` and `info.dir` are dropped | +| `POST secret {name, secret_hash}` | binds a machine to the sha256 of its secret (token only; `tools/relay.mjs secret` does it) | +| `POST name {hostname,name}` `POST role {name,role}` | naming and roles, from the Mac (token only) | + +Tests: `node --test relay/test/guard.test.mjs relay/test/handler.test.mjs relay/test/clients.test.mjs` (the rules, the handler against a fake database and fake blobs, the clients' shape), beside the parse, auth and wake suites; CI runs all six. Wake (`api/wake.mjs`, 0.3.6, 5 October 2026): `GET /wake?since=` is public (the apps hold no token) and rate limited, 30 a minute per IP. It holds up to 45 s and answers `{stamp, at, added, changed, held_ms}` the moment the stored stamp differs from `since`, else the unchanged stamp at the deadline; without `since` it answers at once. `POST /r//wake {stamp, added}` (or `POST /wake` with `x-relay-token` or `x-igneum-key`) records the stamp; `packaging/ota/publish-jobs.sh` sends it after every verified deploy, with the ids it added. One row per stamp in Neon table `relay_wake` (created by the first POST); `tools/jobs.mjs status` reads the rows for the woken latency. The function's `maxDuration` is 60 s (`vercel.json`). Tests: `relay/test/wake.test.mjs` drives the handler with a fake database and clock. ## Mac -`node tools/relay.mjs` (feed), `read `, `drop ""|`, `task PC2 "title" [file]`, `run PC2 "title" script.ps1 [--elevated] [--reboot-continue]`, `watch`, `inbox PC1`, `machines`, `role PC2 prover`, `name DESKTOP-XYZ PC2`, `ack|done|rm `, `url`. Playbooks live in `relay/playbooks/`; `run` fills `__DL_BASE__` in from `~/.config/igneum/dl-token`. +`node tools/relay.mjs` (feed), `read `, `drop ""|`, `task PC2 "title" [file]`, `run PC2 "title" script.ps1 [--elevated] [--reboot-continue] [--reboot]`, `keygen`, `secret PC2`, `watch`, `inbox PC1 [--ack]`, `machines`, `role PC2 prover`, `name DESKTOP-XYZ PC2`, `ack|done|rm `, `url`. Playbooks live in `relay/playbooks/`; a playbook reads the downloads base from `$env:RELAY_DL_BASE` (bash: `$RELAY_DL_BASE`), which the agent holds; `run` refuses a body that says `__DL_BASE__` or carries the dl token (X26). A script asks for a restart by printing `RELAY-REBOOT` on a line of its own, and only a task queued with `--reboot` or `--reboot-continue` restarts the PC. ## PCs -`relay/clients/make-clients.sh` bakes the URL, key and token into copies of the clients and writes `~/Desktop/igneum-relay-clients.zip`. Unzip anywhere on the PC. `send.bat` for people and Claude sessions (see `CLAUDE-PC.md`), `igneum-agent.bat` for the automatic runner: double-click once, leave it open. It registers the PC (hostname, GPUs, WSL, nvcc), polls every 20 s, runs each `run` task in order, posts a `result` (exit code, last 64 KB inline, full log as a file when longer) and marks it done. A script that prints `RELAY-REBOOT` triggers `shutdown /r /t 10`; with `reboot_continue` the agent re-arms (scheduled task at logon with highest privileges, RunOnce as a fallback) and re-runs the task after the restart with `RELAY_PASS` incremented. The PC must sign in by itself for that to be unattended. +`relay/clients/make-clients.sh --machine PC1` bakes the URL, key, token, downloads base and that PC's secret into copies of the clients and writes `~/Desktop/igneum-relay-clients-PC1.zip`. Carry it by hand; never through the downloads host. Unzip anywhere on the PC. `send.bat` for people and Claude sessions (see `CLAUDE-PC.md`), `igneum-agent.bat` for the automatic runner: double-click once, leave it open. It registers the PC (GPUs, WSL, nvcc; no username, no folder), polls every 20 s, checks each `run` task's tag and nonce against its secret (a task that fails is answered with exit 77 and nothing of it runs), runs the rest in order, posts a `result` (exit code, last 64 KB inline, full log as a file when longer) and marks it done. A script that prints `RELAY-REBOOT` on its own line, in a task queued with `--reboot` or `--reboot-continue`, triggers `shutdown /r /t 10`; with `reboot_continue` the agent arms a logon task (highest privileges, RunOnce as a fallback) for that one restart and re-runs the task after it with `RELAY_PASS` incremented. The agent removes the logon task and the RunOnce key every time it starts and when it exits (Ctrl+C included; a closed window is caught by the next start). Nothing is armed on an ordinary start (X25). The PC must sign in by itself for a restart to be unattended. An unknown hostname that registers appears in the feed with a "name this machine" box, or `node tools/relay.mjs name PC2`. PC1 is DESKTOP-KMCV30N. -## The job-channel ping (MF-11, 7 October 2026) +## The agent as a logon task, start-app, and the job-channel ping (MF-11, 7 October 2026) -PC 2 lost power at 10:46Z on 7 October 2026 and nothing said so until a person read the intake. From 0.3.21 every app wake request carries `machine=&v=&job=`; `/wake` records one row per machine in `relay_wake_seen` before it holds (`relay/lib/wake.mjs`: `recordSeen`, `seenList`, `pingState`, `PING_SILENT_S` = 900 s); the console's Machines tab reads it as "job channel polled N ago, last job X" and, after 15 minutes without a poll, "job channel silent since