2 * Author......: Jens Steube <jens.steube@gmail.com>
6 #include "include/kernel_vendor.h"
10 #include "OpenCL/types_ocl.c"
12 inline void generate_pw (u32 pw_buf[16], __global cs_t *root_css_buf, __global cs_t *markov_css_buf, const u32 pw_l_len, const u32 pw_r_len, const u32 mask80, const u32 bits14, const u32 bits15, u64 val)
31 __global cs_t *cs = &root_css_buf[pw_r_len];
36 for (i = 0, j = pw_r_len; i < pw_l_len; i++, j++)
38 const u32 len = cs->cs_len;
40 const u64 next = val / len;
41 const u64 pos = val % len;
45 const u32 key = cs->cs_buf[pos];
47 const u32 jd4 = j / 4;
48 const u32 jm4 = j % 4;
50 pw_buf[jd4] |= key << (jm4 * 8);
52 cs = &markov_css_buf[(j * CHARSIZ) + key];
55 const u32 jd4 = j / 4;
56 const u32 jm4 = j % 4;
58 pw_buf[jd4] |= (0xff << (jm4 * 8)) & mask80;
60 if (bits14) pw_buf[14] = (pw_l_len + pw_r_len) * 8;
61 if (bits15) pw_buf[15] = (pw_l_len + pw_r_len) * 8;
64 __kernel void l_markov (__global pw_t *pws_buf_l, __global cs_t *root_css_buf, __global cs_t *markov_css_buf, const u64 off, const u32 pw_l_len, const u32 pw_r_len, const u32 mask80, const u32 bits14, const u32 bits15, const u32 gid_max)
66 const u32 gid = get_global_id (0);
68 if (gid >= gid_max) return;
72 generate_pw (pw_buf, root_css_buf, markov_css_buf, pw_l_len, pw_r_len, mask80, bits14, bits15, off + gid);
74 pws_buf_l[gid].i[ 0] = pw_buf[ 0];
75 pws_buf_l[gid].i[ 1] = pw_buf[ 1];
76 pws_buf_l[gid].i[ 2] = pw_buf[ 2];
77 pws_buf_l[gid].i[ 3] = pw_buf[ 3];
78 pws_buf_l[gid].i[ 4] = pw_buf[ 4];
79 pws_buf_l[gid].i[ 5] = pw_buf[ 5];
80 pws_buf_l[gid].i[ 6] = pw_buf[ 6];
81 pws_buf_l[gid].i[ 7] = pw_buf[ 7];
82 pws_buf_l[gid].i[ 8] = pw_buf[ 8];
83 pws_buf_l[gid].i[ 9] = pw_buf[ 9];
84 pws_buf_l[gid].i[10] = pw_buf[10];
85 pws_buf_l[gid].i[11] = pw_buf[11];
86 pws_buf_l[gid].i[12] = pw_buf[12];
87 pws_buf_l[gid].i[13] = pw_buf[13];
88 pws_buf_l[gid].i[14] = pw_buf[14];
89 pws_buf_l[gid].i[15] = pw_buf[15];
91 pws_buf_l[gid].pw_len = pw_l_len + pw_r_len;
94 __kernel void r_markov (__global bf_t *pws_buf_r, __global cs_t *root_css_buf, __global cs_t *markov_css_buf, const u64 off, const u32 pw_r_len, const u32 mask80, const u32 bits14, const u32 bits15, const u32 gid_max)
96 const u32 gid = get_global_id (0);
98 if (gid >= gid_max) return;
102 generate_pw (pw_buf, root_css_buf, markov_css_buf, pw_r_len, 0, 0, 0, 0, off + gid);
104 pws_buf_r[gid].i = pw_buf[0];
107 __kernel void C_markov (__global comb_t *pws_buf, __global cs_t *root_css_buf, __global cs_t *markov_css_buf, const u64 off, const u32 pw_len, const u32 mask80, const u32 bits14, const u32 bits15, const u32 gid_max)
109 const u32 gid = get_global_id (0);
111 if (gid >= gid_max) return;
115 generate_pw (pw_buf, root_css_buf, markov_css_buf, pw_len, 0, mask80, bits14, bits15, off + gid);
117 pws_buf[gid].i[ 0] = pw_buf[ 0];
118 pws_buf[gid].i[ 1] = pw_buf[ 1];
119 pws_buf[gid].i[ 2] = pw_buf[ 2];
120 pws_buf[gid].i[ 3] = pw_buf[ 3];
121 pws_buf[gid].i[ 4] = pw_buf[ 4];
122 pws_buf[gid].i[ 5] = pw_buf[ 5];
123 pws_buf[gid].i[ 6] = pw_buf[ 6];
124 pws_buf[gid].i[ 7] = pw_buf[ 7];
126 pws_buf[gid].pw_len = pw_len;