代码拉取完成,页面将自动刷新
#ifndef JSTD_FAST_DIV_H
#define JSTD_FAST_DIV_H
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#if defined(_MSC_VER)
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <math.h>
#include <assert.h>
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <algorithm>
#include "jstd/DivUtils.h"
#include "jstd/FastMod.h"
//
// Articles and documents
//
// https://zhuanlan.zhihu.com/p/151038723 (This article is very nice)
//
// Integer Division: Barrett Reduction & Lemire Reduction (There is a new (2019) method)
//
// PDF: [Lemire et al. 2019](https://arxiv.org/abs/1902.01961)
//
//
// See: https://en.algorithmica.org/hpc/arithmetic/division/
//
// https://github.com/rubenvannieuwpoort/division-by-constant-integers/
// https://github.com/rubenvannieuwpoort/division-by-constant-integers/blob/master/unsigned/runtime/unsigned_division.h
//
// https://stackoverflow.com/questions/45353629/repeated-integer-division-by-a-runtime-constant-value
//
// PDF: Integer Division by Constants: Optimal Bounds
// https://arxiv.org/abs/2012.12369
//
// PDF: Division by Invariant Integers using Multiplication
// http://gmplib.org/~tege/divcnst-pldi94.pdf
//
// See: https://www.cnblogs.com/shines77/p/4189074.html
// See: https://bbs.emath.ac.cn/thread-521-3-1.html (liangbch)
//
// (English? Aliyun.com)
// See: https://topic.alibabacloud.com/a/how-does-the-compiler-implement-constant-integer-division-optimization-for-32-bit-integers-c--_1_31_30483239.html
//
namespace jstd {
static const std::uint32_t kMaxDivTable = 512;
struct DivRatio32_v1 {
uint32_t mul;
uint32_t shift;
};
struct DivRatio32 {
uint32_t mul;
uint32_t add;
uint32_t shift;
uint32_t reserve;
};
struct DivRatio32_64 {
uint64_t mul;
uint32_t shift;
uint32_t reserve;
};
struct DivRatio64 {
uint64_t mul;
uint64_t add;
uint32_t shift;
uint32_t reserve;
};
static const DivRatio32_v1 div_ratio_tbl32_v1[kMaxDivTable] = {
{ /* 0 */ 0x00000000, 0 }, { /* 1 */ 0xFFFFFFFF, 0 },
{ /* 2 */ 0x80000000, 0 }, { /* 3 */ 0xAAAAAAAB, 1 },
{ /* 4 */ 0x40000000, 0 }, { /* 5 */ 0xCCCCCCCD, 2 },
{ /* 6 */ 0xAAAAAAAB, 2 }, { /* 7 */ 0x92492493, 2 },
{ /* 8 */ 0x20000000, 0 }, { /* 9 */ 0xE38E38E4, 3 },
{ /* 10 */ 0xCCCCCCCD, 3 }, { /* 11 */ 0xBA2E8BA3, 3 },
{ /* 12 */ 0xAAAAAAAB, 3 }, { /* 13 */ 0x9D89D89E, 3 },
{ /* 14 */ 0x92492493, 3 }, { /* 15 */ 0x88888889, 3 },
{ /* 16 */ 0x10000000, 0 }, { /* 17 */ 0xF0F0F0F1, 4 },
{ /* 18 */ 0xE38E38E4, 4 }, { /* 19 */ 0xD79435E6, 4 },
{ /* 20 */ 0xCCCCCCCD, 4 }, { /* 21 */ 0xC30C30C4, 4 },
{ /* 22 */ 0xBA2E8BA3, 4 }, { /* 23 */ 0xB21642C9, 4 },
{ /* 24 */ 0xAAAAAAAB, 4 }, { /* 25 */ 0xA3D70A3E, 4 },
{ /* 26 */ 0x9D89D89E, 4 }, { /* 27 */ 0x97B425EE, 4 },
{ /* 28 */ 0x92492493, 4 }, { /* 29 */ 0x8D3DCB09, 4 },
{ /* 30 */ 0x88888889, 4 }, { /* 31 */ 0x84210843, 4 },
{ /* 32 */ 0x08000000, 0 }, { /* 33 */ 0xF83E0F84, 5 },
{ /* 34 */ 0xF0F0F0F1, 5 }, { /* 35 */ 0xEA0EA0EB, 5 },
{ /* 36 */ 0xE38E38E4, 5 }, { /* 37 */ 0xDD67C8A7, 5 },
{ /* 38 */ 0xD79435E6, 5 }, { /* 39 */ 0xD20D20D3, 5 },
{ /* 40 */ 0xCCCCCCCD, 5 }, { /* 41 */ 0xC7CE0C7D, 5 },
{ /* 42 */ 0xC30C30C4, 5 }, { /* 43 */ 0xBE82FA0C, 5 },
{ /* 44 */ 0xBA2E8BA3, 5 }, { /* 45 */ 0xB60B60B7, 5 },
{ /* 46 */ 0xB21642C9, 5 }, { /* 47 */ 0xAE4C415D, 5 },
{ /* 48 */ 0xAAAAAAAB, 5 }, { /* 49 */ 0xA72F053A, 5 },
{ /* 50 */ 0xA3D70A3E, 5 }, { /* 51 */ 0xA0A0A0A1, 5 },
{ /* 52 */ 0x9D89D89E, 5 }, { /* 53 */ 0x9A90E7DA, 5 },
{ /* 54 */ 0x97B425EE, 5 }, { /* 55 */ 0x94F20950, 5 },
{ /* 56 */ 0x92492493, 5 }, { /* 57 */ 0x8FB823EF, 5 },
{ /* 58 */ 0x8D3DCB09, 5 }, { /* 59 */ 0x8AD8F2FC, 5 },
{ /* 60 */ 0x88888889, 5 }, { /* 61 */ 0x864B8A7E, 5 },
{ /* 62 */ 0x84210843, 5 }, { /* 63 */ 0x82082083, 5 },
{ /* 64 */ 0x04000000, 0 }, { /* 65 */ 0xFC0FC0FD, 6 },
{ /* 66 */ 0xF83E0F84, 6 }, { /* 67 */ 0xF4898D60, 6 },
{ /* 68 */ 0xF0F0F0F1, 6 }, { /* 69 */ 0xED7303B6, 6 },
{ /* 70 */ 0xEA0EA0EB, 6 }, { /* 71 */ 0xE6C2B449, 6 },
{ /* 72 */ 0xE38E38E4, 6 }, { /* 73 */ 0xE070381D, 6 },
{ /* 74 */ 0xDD67C8A7, 6 }, { /* 75 */ 0xDA740DA8, 6 },
{ /* 76 */ 0xD79435E6, 6 }, { /* 77 */ 0xD4C77B04, 6 },
{ /* 78 */ 0xD20D20D3, 6 }, { /* 79 */ 0xCF6474A9, 6 },
{ /* 80 */ 0xCCCCCCCD, 6 }, { /* 81 */ 0xCA4587E7, 6 },
{ /* 82 */ 0xC7CE0C7D, 6 }, { /* 83 */ 0xC565C87C, 6 },
{ /* 84 */ 0xC30C30C4, 6 }, { /* 85 */ 0xC0C0C0C1, 6 },
{ /* 86 */ 0xBE82FA0C, 6 }, { /* 87 */ 0xBC52640C, 6 },
{ /* 88 */ 0xBA2E8BA3, 6 }, { /* 89 */ 0xB81702E1, 6 },
{ /* 90 */ 0xB60B60B7, 6 }, { /* 91 */ 0xB40B40B5, 6 },
{ /* 92 */ 0xB21642C9, 6 }, { /* 93 */ 0xB02C0B03, 6 },
{ /* 94 */ 0xAE4C415D, 6 }, { /* 95 */ 0xAC769185, 6 },
{ /* 96 */ 0xAAAAAAAB, 6 }, { /* 97 */ 0xA8E83F58, 6 },
{ /* 98 */ 0xA72F053A, 6 }, { /* 99 */ 0xA57EB503, 6 },
{ /* 100 */ 0xA3D70A3E, 6 }, { /* 101 */ 0xA237C32C, 6 },
{ /* 102 */ 0xA0A0A0A1, 6 }, { /* 103 */ 0x9F1165E8, 6 },
{ /* 104 */ 0x9D89D89E, 6 }, { /* 105 */ 0x9C09C09D, 6 },
{ /* 106 */ 0x9A90E7DA, 6 }, { /* 107 */ 0x991F1A52, 6 },
{ /* 108 */ 0x97B425EE, 6 }, { /* 109 */ 0x964FDA6D, 6 },
{ /* 110 */ 0x94F20950, 6 }, { /* 111 */ 0x939A85C5, 6 },
{ /* 112 */ 0x92492493, 6 }, { /* 113 */ 0x90FDBC0A, 6 },
{ /* 114 */ 0x8FB823EF, 6 }, { /* 115 */ 0x8E78356E, 6 },
{ /* 116 */ 0x8D3DCB09, 6 }, { /* 117 */ 0x8C08C08D, 6 },
{ /* 118 */ 0x8AD8F2FC, 6 }, { /* 119 */ 0x89AE408A, 6 },
{ /* 120 */ 0x88888889, 6 }, { /* 121 */ 0x8767AB60, 6 },
{ /* 122 */ 0x864B8A7E, 6 }, { /* 123 */ 0x85340854, 6 },
{ /* 124 */ 0x84210843, 6 }, { /* 125 */ 0x83126E98, 6 },
{ /* 126 */ 0x82082083, 6 }, { /* 127 */ 0x81020409, 6 },
{ /* 128 */ 0x02000000, 0 }, { /* 129 */ 0xFE03F810, 7 },
{ /* 130 */ 0xFC0FC0FD, 7 }, { /* 131 */ 0xFA232CF3, 7 },
{ /* 132 */ 0xF83E0F84, 7 }, { /* 133 */ 0xF6603D99, 7 },
{ /* 134 */ 0xF4898D60, 7 }, { /* 135 */ 0xF2B9D649, 7 },
{ /* 136 */ 0xF0F0F0F1, 7 }, { /* 137 */ 0xEF2EB720, 7 },
{ /* 138 */ 0xED7303B6, 7 }, { /* 139 */ 0xEBBDB2A6, 7 },
{ /* 140 */ 0xEA0EA0EB, 7 }, { /* 141 */ 0xE865AC7C, 7 },
{ /* 142 */ 0xE6C2B449, 7 }, { /* 143 */ 0xE525982B, 7 },
{ /* 144 */ 0xE38E38E4, 7 }, { /* 145 */ 0xE1FC780F, 7 },
{ /* 146 */ 0xE070381D, 7 }, { /* 147 */ 0xDEE95C4D, 7 },
{ /* 148 */ 0xDD67C8A7, 7 }, { /* 149 */ 0xDBEB61EF, 7 },
{ /* 150 */ 0xDA740DA8, 7 }, { /* 151 */ 0xD901B204, 7 },
{ /* 152 */ 0xD79435E6, 7 }, { /* 153 */ 0xD62B80D7, 7 },
{ /* 154 */ 0xD4C77B04, 7 }, { /* 155 */ 0xD3680D37, 7 },
{ /* 156 */ 0xD20D20D3, 7 }, { /* 157 */ 0xD0B69FCC, 7 },
{ /* 158 */ 0xCF6474A9, 7 }, { /* 159 */ 0xCE168A78, 7 },
{ /* 160 */ 0xCCCCCCCD, 7 }, { /* 161 */ 0xCB8727C1, 7 },
{ /* 162 */ 0xCA4587E7, 7 }, { /* 163 */ 0xC907DA4F, 7 },
{ /* 164 */ 0xC7CE0C7D, 7 }, { /* 165 */ 0xC6980C6A, 7 },
{ /* 166 */ 0xC565C87C, 7 }, { /* 167 */ 0xC4372F86, 7 },
{ /* 168 */ 0xC30C30C4, 7 }, { /* 169 */ 0xC1E4BBD6, 7 },
{ /* 170 */ 0xC0C0C0C1, 7 }, { /* 171 */ 0xBFA02FE9, 7 },
{ /* 172 */ 0xBE82FA0C, 7 }, { /* 173 */ 0xBD691048, 7 },
{ /* 174 */ 0xBC52640C, 7 }, { /* 175 */ 0xBB3EE722, 7 },
{ /* 176 */ 0xBA2E8BA3, 7 }, { /* 177 */ 0xB92143FB, 7 },
{ /* 178 */ 0xB81702E1, 7 }, { /* 179 */ 0xB70FBB5B, 7 },
{ /* 180 */ 0xB60B60B7, 7 }, { /* 181 */ 0xB509E68B, 7 },
{ /* 182 */ 0xB40B40B5, 7 }, { /* 183 */ 0xB30F6353, 7 },
{ /* 184 */ 0xB21642C9, 7 }, { /* 185 */ 0xB11FD3B9, 7 },
{ /* 186 */ 0xB02C0B03, 7 }, { /* 187 */ 0xAF3ADDC7, 7 },
{ /* 188 */ 0xAE4C415D, 7 }, { /* 189 */ 0xAD602B59, 7 },
{ /* 190 */ 0xAC769185, 7 }, { /* 191 */ 0xAB8F69E3, 7 },
{ /* 192 */ 0xAAAAAAAB, 7 }, { /* 193 */ 0xA9C84A48, 7 },
{ /* 194 */ 0xA8E83F58, 7 }, { /* 195 */ 0xA80A80A9, 7 },
{ /* 196 */ 0xA72F053A, 7 }, { /* 197 */ 0xA655C43A, 7 },
{ /* 198 */ 0xA57EB503, 7 }, { /* 199 */ 0xA4A9CF1E, 7 },
{ /* 200 */ 0xA3D70A3E, 7 }, { /* 201 */ 0xA3065E40, 7 },
{ /* 202 */ 0xA237C32C, 7 }, { /* 203 */ 0xA16B312F, 7 },
{ /* 204 */ 0xA0A0A0A1, 7 }, { /* 205 */ 0x9FD809FE, 7 },
{ /* 206 */ 0x9F1165E8, 7 }, { /* 207 */ 0x9E4CAD24, 7 },
{ /* 208 */ 0x9D89D89E, 7 }, { /* 209 */ 0x9CC8E161, 7 },
{ /* 210 */ 0x9C09C09D, 7 }, { /* 211 */ 0x9B4C6F9F, 7 },
{ /* 212 */ 0x9A90E7DA, 7 }, { /* 213 */ 0x99D722DB, 7 },
{ /* 214 */ 0x991F1A52, 7 }, { /* 215 */ 0x9868C80A, 7 },
{ /* 216 */ 0x97B425EE, 7 }, { /* 217 */ 0x97012E03, 7 },
{ /* 218 */ 0x964FDA6D, 7 }, { /* 219 */ 0x95A02569, 7 },
{ /* 220 */ 0x94F20950, 7 }, { /* 221 */ 0x94458095, 7 },
{ /* 222 */ 0x939A85C5, 7 }, { /* 223 */ 0x92F11385, 7 },
{ /* 224 */ 0x92492493, 7 }, { /* 225 */ 0x91A2B3C5, 7 },
{ /* 226 */ 0x90FDBC0A, 7 }, { /* 227 */ 0x905A3864, 7 },
{ /* 228 */ 0x8FB823EF, 7 }, { /* 229 */ 0x8F1779DA, 7 },
{ /* 230 */ 0x8E78356E, 7 }, { /* 231 */ 0x8DDA5203, 7 },
{ /* 232 */ 0x8D3DCB09, 7 }, { /* 233 */ 0x8CA29C05, 7 },
{ /* 234 */ 0x8C08C08D, 7 }, { /* 235 */ 0x8B70344B, 7 },
{ /* 236 */ 0x8AD8F2FC, 7 }, { /* 237 */ 0x8A42F871, 7 },
{ /* 238 */ 0x89AE408A, 7 }, { /* 239 */ 0x891AC73B, 7 },
{ /* 240 */ 0x88888889, 7 }, { /* 241 */ 0x87F78088, 7 },
{ /* 242 */ 0x8767AB60, 7 }, { /* 243 */ 0x86D90545, 7 },
{ /* 244 */ 0x864B8A7E, 7 }, { /* 245 */ 0x85BF3762, 7 },
{ /* 246 */ 0x85340854, 7 }, { /* 247 */ 0x84A9F9C9, 7 },
{ /* 248 */ 0x84210843, 7 }, { /* 249 */ 0x83993053, 7 },
{ /* 250 */ 0x83126E98, 7 }, { /* 251 */ 0x828CBFBF, 7 },
{ /* 252 */ 0x82082083, 7 }, { /* 253 */ 0x81848DA9, 7 },
{ /* 254 */ 0x81020409, 7 }, { /* 255 */ 0x80808081, 7 },
{ /* 256 */ 0x01000000, 0 }, { /* 257 */ 0xFF00FF01, 8 },
{ /* 258 */ 0xFE03F810, 8 }, { /* 259 */ 0xFD08E551, 8 },
{ /* 260 */ 0xFC0FC0FD, 8 }, { /* 261 */ 0xFB188566, 8 },
{ /* 262 */ 0xFA232CF3, 8 }, { /* 263 */ 0xF92FB222, 8 },
{ /* 264 */ 0xF83E0F84, 8 }, { /* 265 */ 0xF74E3FC3, 8 },
{ /* 266 */ 0xF6603D99, 8 }, { /* 267 */ 0xF57403D6, 8 },
{ /* 268 */ 0xF4898D60, 8 }, { /* 269 */ 0xF3A0D52D, 8 },
{ /* 270 */ 0xF2B9D649, 8 }, { /* 271 */ 0xF1D48BCF, 8 },
{ /* 272 */ 0xF0F0F0F1, 8 }, { /* 273 */ 0xF00F00F1, 8 },
{ /* 274 */ 0xEF2EB720, 8 }, { /* 275 */ 0xEE500EE6, 8 },
{ /* 276 */ 0xED7303B6, 8 }, { /* 277 */ 0xEC979119, 8 },
{ /* 278 */ 0xEBBDB2A6, 8 }, { /* 279 */ 0xEAE56404, 8 },
{ /* 280 */ 0xEA0EA0EB, 8 }, { /* 281 */ 0xE9396520, 8 },
{ /* 282 */ 0xE865AC7C, 8 }, { /* 283 */ 0xE79372E3, 8 },
{ /* 284 */ 0xE6C2B449, 8 }, { /* 285 */ 0xE5F36CB1, 8 },
{ /* 286 */ 0xE525982B, 8 }, { /* 287 */ 0xE45932D8, 8 },
{ /* 288 */ 0xE38E38E4, 8 }, { /* 289 */ 0xE2C4A689, 8 },
{ /* 290 */ 0xE1FC780F, 8 }, { /* 291 */ 0xE135A9CA, 8 },
{ /* 292 */ 0xE070381D, 8 }, { /* 293 */ 0xDFAC1F75, 8 },
{ /* 294 */ 0xDEE95C4D, 8 }, { /* 295 */ 0xDE27EB2D, 8 },
{ /* 296 */ 0xDD67C8A7, 8 }, { /* 297 */ 0xDCA8F159, 8 },
{ /* 298 */ 0xDBEB61EF, 8 }, { /* 299 */ 0xDB2F171E, 8 },
{ /* 300 */ 0xDA740DA8, 8 }, { /* 301 */ 0xD9BA4257, 8 },
{ /* 302 */ 0xD901B204, 8 }, { /* 303 */ 0xD84A598F, 8 },
{ /* 304 */ 0xD79435E6, 8 }, { /* 305 */ 0xD6DF43FD, 8 },
{ /* 306 */ 0xD62B80D7, 8 }, { /* 307 */ 0xD578E97D, 8 },
{ /* 308 */ 0xD4C77B04, 8 }, { /* 309 */ 0xD417328A, 8 },
{ /* 310 */ 0xD3680D37, 8 }, { /* 311 */ 0xD2BA083C, 8 },
{ /* 312 */ 0xD20D20D3, 8 }, { /* 313 */ 0xD161543F, 8 },
{ /* 314 */ 0xD0B69FCC, 8 }, { /* 315 */ 0xD00D00D1, 8 },
{ /* 316 */ 0xCF6474A9, 8 }, { /* 317 */ 0xCEBCF8BC, 8 },
{ /* 318 */ 0xCE168A78, 8 }, { /* 319 */ 0xCD712753, 8 },
{ /* 320 */ 0xCCCCCCCD, 8 }, { /* 321 */ 0xCC29786D, 8 },
{ /* 322 */ 0xCB8727C1, 8 }, { /* 323 */ 0xCAE5D860, 8 },
{ /* 324 */ 0xCA4587E7, 8 }, { /* 325 */ 0xC9A633FD, 8 },
{ /* 326 */ 0xC907DA4F, 8 }, { /* 327 */ 0xC86A7891, 8 },
{ /* 328 */ 0xC7CE0C7D, 8 }, { /* 329 */ 0xC73293D8, 8 },
{ /* 330 */ 0xC6980C6A, 8 }, { /* 331 */ 0xC5FE7404, 8 },
{ /* 332 */ 0xC565C87C, 8 }, { /* 333 */ 0xC4CE07B1, 8 },
{ /* 334 */ 0xC4372F86, 8 }, { /* 335 */ 0xC3A13DE7, 8 },
{ /* 336 */ 0xC30C30C4, 8 }, { /* 337 */ 0xC2780614, 8 },
{ /* 338 */ 0xC1E4BBD6, 8 }, { /* 339 */ 0xC152500D, 8 },
{ /* 340 */ 0xC0C0C0C1, 8 }, { /* 341 */ 0xC0300C04, 8 },
{ /* 342 */ 0xBFA02FE9, 8 }, { /* 343 */ 0xBF112A8B, 8 },
{ /* 344 */ 0xBE82FA0C, 8 }, { /* 345 */ 0xBDF59C92, 8 },
{ /* 346 */ 0xBD691048, 8 }, { /* 347 */ 0xBCDD535E, 8 },
{ /* 348 */ 0xBC52640C, 8 }, { /* 349 */ 0xBBC8408D, 8 },
{ /* 350 */ 0xBB3EE722, 8 }, { /* 351 */ 0xBAB65611, 8 },
{ /* 352 */ 0xBA2E8BA3, 8 }, { /* 353 */ 0xB9A7862B, 8 },
{ /* 354 */ 0xB92143FB, 8 }, { /* 355 */ 0xB89BC36D, 8 },
{ /* 356 */ 0xB81702E1, 8 }, { /* 357 */ 0xB79300B8, 8 },
{ /* 358 */ 0xB70FBB5B, 8 }, { /* 359 */ 0xB68D3135, 8 },
{ /* 360 */ 0xB60B60B7, 8 }, { /* 361 */ 0xB58A4856, 8 },
{ /* 362 */ 0xB509E68B, 8 }, { /* 363 */ 0xB48A39D5, 8 },
{ /* 364 */ 0xB40B40B5, 8 }, { /* 365 */ 0xB38CF9B1, 8 },
{ /* 366 */ 0xB30F6353, 8 }, { /* 367 */ 0xB2927C2A, 8 },
{ /* 368 */ 0xB21642C9, 8 }, { /* 369 */ 0xB19AB5C5, 8 },
{ /* 370 */ 0xB11FD3B9, 8 }, { /* 371 */ 0xB0A59B42, 8 },
{ /* 372 */ 0xB02C0B03, 8 }, { /* 373 */ 0xAFB321A2, 8 },
{ /* 374 */ 0xAF3ADDC7, 8 }, { /* 375 */ 0xAEC33E20, 8 },
{ /* 376 */ 0xAE4C415D, 8 }, { /* 377 */ 0xADD5E633, 8 },
{ /* 378 */ 0xAD602B59, 8 }, { /* 379 */ 0xACEB0F8A, 8 },
{ /* 380 */ 0xAC769185, 8 }, { /* 381 */ 0xAC02B00B, 8 },
{ /* 382 */ 0xAB8F69E3, 8 }, { /* 383 */ 0xAB1CBDD4, 8 },
{ /* 384 */ 0xAAAAAAAB, 8 }, { /* 385 */ 0xAA392F36, 8 },
{ /* 386 */ 0xA9C84A48, 8 }, { /* 387 */ 0xA957FAB6, 8 },
{ /* 388 */ 0xA8E83F58, 8 }, { /* 389 */ 0xA8791709, 8 },
{ /* 390 */ 0xA80A80A9, 8 }, { /* 391 */ 0xA79C7B17, 8 },
{ /* 392 */ 0xA72F053A, 8 }, { /* 393 */ 0xA6C21DF7, 8 },
{ /* 394 */ 0xA655C43A, 8 }, { /* 395 */ 0xA5E9F6EE, 8 },
{ /* 396 */ 0xA57EB503, 8 }, { /* 397 */ 0xA513FD6C, 8 },
{ /* 398 */ 0xA4A9CF1E, 8 }, { /* 399 */ 0xA4402911, 8 },
{ /* 400 */ 0xA3D70A3E, 8 }, { /* 401 */ 0xA36E71A3, 8 },
{ /* 402 */ 0xA3065E40, 8 }, { /* 403 */ 0xA29ECF17, 8 },
{ /* 404 */ 0xA237C32C, 8 }, { /* 405 */ 0xA1D13986, 8 },
{ /* 406 */ 0xA16B312F, 8 }, { /* 407 */ 0xA105A933, 8 },
{ /* 408 */ 0xA0A0A0A1, 8 }, { /* 409 */ 0xA03C1689, 8 },
{ /* 410 */ 0x9FD809FE, 8 }, { /* 411 */ 0x9F747A16, 8 },
{ /* 412 */ 0x9F1165E8, 8 }, { /* 413 */ 0x9EAECC8E, 8 },
{ /* 414 */ 0x9E4CAD24, 8 }, { /* 415 */ 0x9DEB06CA, 8 },
{ /* 416 */ 0x9D89D89E, 8 }, { /* 417 */ 0x9D2921C4, 8 },
{ /* 418 */ 0x9CC8E161, 8 }, { /* 419 */ 0x9C69169C, 8 },
{ /* 420 */ 0x9C09C09D, 8 }, { /* 421 */ 0x9BAADE8F, 8 },
{ /* 422 */ 0x9B4C6F9F, 8 }, { /* 423 */ 0x9AEE72FD, 8 },
{ /* 424 */ 0x9A90E7DA, 8 }, { /* 425 */ 0x9A33CD68, 8 },
{ /* 426 */ 0x99D722DB, 8 }, { /* 427 */ 0x997AE76C, 8 },
{ /* 428 */ 0x991F1A52, 8 }, { /* 429 */ 0x98C3BAC8, 8 },
{ /* 430 */ 0x9868C80A, 8 }, { /* 431 */ 0x980E4157, 8 },
{ /* 432 */ 0x97B425EE, 8 }, { /* 433 */ 0x975A7510, 8 },
{ /* 434 */ 0x97012E03, 8 }, { /* 435 */ 0x96A8500A, 8 },
{ /* 436 */ 0x964FDA6D, 8 }, { /* 437 */ 0x95F7CC73, 8 },
{ /* 438 */ 0x95A02569, 8 }, { /* 439 */ 0x9548E498, 8 },
{ /* 440 */ 0x94F20950, 8 }, { /* 441 */ 0x949B92DE, 8 },
{ /* 442 */ 0x94458095, 8 }, { /* 443 */ 0x93EFD1C6, 8 },
{ /* 444 */ 0x939A85C5, 8 }, { /* 445 */ 0x93459BE7, 8 },
{ /* 446 */ 0x92F11385, 8 }, { /* 447 */ 0x929CEBF5, 8 },
{ /* 448 */ 0x92492493, 8 }, { /* 449 */ 0x91F5BCB9, 8 },
{ /* 450 */ 0x91A2B3C5, 8 }, { /* 451 */ 0x91500916, 8 },
{ /* 452 */ 0x90FDBC0A, 8 }, { /* 453 */ 0x90ABCC03, 8 },
{ /* 454 */ 0x905A3864, 8 }, { /* 455 */ 0x90090091, 8 },
{ /* 456 */ 0x8FB823EF, 8 }, { /* 457 */ 0x8F67A1E4, 8 },
{ /* 458 */ 0x8F1779DA, 8 }, { /* 459 */ 0x8EC7AB3A, 8 },
{ /* 460 */ 0x8E78356E, 8 }, { /* 461 */ 0x8E2917E1, 8 },
{ /* 462 */ 0x8DDA5203, 8 }, { /* 463 */ 0x8D8BE340, 8 },
{ /* 464 */ 0x8D3DCB09, 8 }, { /* 465 */ 0x8CF008D0, 8 },
{ /* 466 */ 0x8CA29C05, 8 }, { /* 467 */ 0x8C55841D, 8 },
{ /* 468 */ 0x8C08C08D, 8 }, { /* 469 */ 0x8BBC50C9, 8 },
{ /* 470 */ 0x8B70344B, 8 }, { /* 471 */ 0x8B246A88, 8 },
{ /* 472 */ 0x8AD8F2FC, 8 }, { /* 473 */ 0x8A8DCD20, 8 },
{ /* 474 */ 0x8A42F871, 8 }, { /* 475 */ 0x89F8746A, 8 },
{ /* 476 */ 0x89AE408A, 8 }, { /* 477 */ 0x89645C50, 8 },
{ /* 478 */ 0x891AC73B, 8 }, { /* 479 */ 0x88D180CE, 8 },
{ /* 480 */ 0x88888889, 8 }, { /* 481 */ 0x883FDDF1, 8 },
{ /* 482 */ 0x87F78088, 8 }, { /* 483 */ 0x87AF6FD6, 8 },
{ /* 484 */ 0x8767AB60, 8 }, { /* 485 */ 0x872032AD, 8 },
{ /* 486 */ 0x86D90545, 8 }, { /* 487 */ 0x869222B2, 8 },
{ /* 488 */ 0x864B8A7E, 8 }, { /* 489 */ 0x86053C35, 8 },
{ /* 490 */ 0x85BF3762, 8 }, { /* 491 */ 0x85797B92, 8 },
{ /* 492 */ 0x85340854, 8 }, { /* 493 */ 0x84EEDD36, 8 },
{ /* 494 */ 0x84A9F9C9, 8 }, { /* 495 */ 0x84655D9C, 8 },
{ /* 496 */ 0x84210843, 8 }, { /* 497 */ 0x83DCF94E, 8 },
{ /* 498 */ 0x83993053, 8 }, { /* 499 */ 0x8355ACE4, 8 },
{ /* 500 */ 0x83126E98, 8 }, { /* 501 */ 0x82CF7504, 8 },
{ /* 502 */ 0x828CBFBF, 8 }, { /* 503 */ 0x824A4E61, 8 },
{ /* 504 */ 0x82082083, 8 }, { /* 505 */ 0x81C635BD, 8 },
{ /* 506 */ 0x81848DA9, 8 }, { /* 507 */ 0x814327E4, 8 },
{ /* 508 */ 0x81020409, 8 }, { /* 509 */ 0x80C121B3, 8 },
{ /* 510 */ 0x80808081, 8 }, { /* 511 */ 0x80402011, 8 },
};
static const DivRatio32 div_ratio_tbl32_v2[kMaxDivTable] = {
{ /* 0 */ 0x00000000, 0x00000000, 0, 0 }, { /* 1 */ 0xFFFFFFFF, 0xFFFFFFFF, 0, 0 },
{ /* 2 */ 0x80000000, 0x00000000, 0, 0 }, { /* 3 */ 0xAAAAAAAB, 0x00000000, 1, 0 },
{ /* 4 */ 0x40000000, 0x00000000, 0, 0 }, { /* 5 */ 0xCCCCCCCD, 0x00000000, 2, 0 },
{ /* 6 */ 0xAAAAAAAB, 0x00000000, 2, 0 }, { /* 7 */ 0x92492492, 0x92492492, 2, 0 },
{ /* 8 */ 0x20000000, 0x00000000, 0, 0 }, { /* 9 */ 0xE38E38E4, 0x00000000, 3, 0 },
{ /* 10 */ 0xCCCCCCCD, 0x00000000, 3, 0 }, { /* 11 */ 0xBA2E8BA3, 0x00000000, 3, 0 },
{ /* 12 */ 0xAAAAAAAB, 0x00000000, 3, 0 }, { /* 13 */ 0x9D89D89E, 0x00000000, 3, 0 },
{ /* 14 */ 0x92492492, 0x92492492, 3, 0 }, { /* 15 */ 0x88888889, 0x00000000, 3, 0 },
{ /* 16 */ 0x10000000, 0x00000000, 0, 0 }, { /* 17 */ 0xF0F0F0F1, 0x00000000, 4, 0 },
{ /* 18 */ 0xE38E38E4, 0x00000000, 4, 0 }, { /* 19 */ 0xD79435E5, 0xD79435E5, 4, 0 },
{ /* 20 */ 0xCCCCCCCD, 0x00000000, 4, 0 }, { /* 21 */ 0xC30C30C3, 0xC30C30C3, 4, 0 },
{ /* 22 */ 0xBA2E8BA3, 0x00000000, 4, 0 }, { /* 23 */ 0xB21642C9, 0x00000000, 4, 0 },
{ /* 24 */ 0xAAAAAAAB, 0x00000000, 4, 0 }, { /* 25 */ 0xA3D70A3E, 0x00000000, 4, 0 },
{ /* 26 */ 0x9D89D89E, 0x00000000, 4, 0 }, { /* 27 */ 0x97B425ED, 0x97B425ED, 4, 0 },
{ /* 28 */ 0x92492492, 0x92492492, 4, 0 }, { /* 29 */ 0x8D3DCB09, 0x00000000, 4, 0 },
{ /* 30 */ 0x88888889, 0x00000000, 4, 0 }, { /* 31 */ 0x84210842, 0x84210842, 4, 0 },
{ /* 32 */ 0x08000000, 0x00000000, 0, 0 }, { /* 33 */ 0xF83E0F84, 0x00000000, 5, 0 },
{ /* 34 */ 0xF0F0F0F1, 0x00000000, 5, 0 }, { /* 35 */ 0xEA0EA0EA, 0xEA0EA0EA, 5, 0 },
{ /* 36 */ 0xE38E38E4, 0x00000000, 5, 0 }, { /* 37 */ 0xDD67C8A6, 0xDD67C8A6, 5, 0 },
{ /* 38 */ 0xD79435E5, 0xD79435E5, 5, 0 }, { /* 39 */ 0xD20D20D2, 0xD20D20D2, 5, 0 },
{ /* 40 */ 0xCCCCCCCD, 0x00000000, 5, 0 }, { /* 41 */ 0xC7CE0C7D, 0x00000000, 5, 0 },
{ /* 42 */ 0xC30C30C3, 0xC30C30C3, 5, 0 }, { /* 43 */ 0xBE82FA0C, 0x00000000, 5, 0 },
{ /* 44 */ 0xBA2E8BA3, 0x00000000, 5, 0 }, { /* 45 */ 0xB60B60B6, 0xB60B60B6, 5, 0 },
{ /* 46 */ 0xB21642C9, 0x00000000, 5, 0 }, { /* 47 */ 0xAE4C415D, 0x00000000, 5, 0 },
{ /* 48 */ 0xAAAAAAAB, 0x00000000, 5, 0 }, { /* 49 */ 0xA72F053A, 0x00000000, 5, 0 },
{ /* 50 */ 0xA3D70A3E, 0x00000000, 5, 0 }, { /* 51 */ 0xA0A0A0A1, 0x00000000, 5, 0 },
{ /* 52 */ 0x9D89D89E, 0x00000000, 5, 0 }, { /* 53 */ 0x9A90E7D9, 0x9A90E7D9, 5, 0 },
{ /* 54 */ 0x97B425ED, 0x97B425ED, 5, 0 }, { /* 55 */ 0x94F2094F, 0x94F2094F, 5, 0 },
{ /* 56 */ 0x92492492, 0x92492492, 5, 0 }, { /* 57 */ 0x8FB823EE, 0x8FB823EE, 5, 0 },
{ /* 58 */ 0x8D3DCB09, 0x00000000, 5, 0 }, { /* 59 */ 0x8AD8F2FC, 0x00000000, 5, 0 },
{ /* 60 */ 0x88888889, 0x00000000, 5, 0 }, { /* 61 */ 0x864B8A7E, 0x00000000, 5, 0 },
{ /* 62 */ 0x84210842, 0x84210842, 5, 0 }, { /* 63 */ 0x82082082, 0x82082082, 5, 0 },
{ /* 64 */ 0x04000000, 0x00000000, 0, 0 }, { /* 65 */ 0xFC0FC0FD, 0x00000000, 6, 0 },
{ /* 66 */ 0xF83E0F84, 0x00000000, 6, 0 }, { /* 67 */ 0xF4898D60, 0x00000000, 6, 0 },
{ /* 68 */ 0xF0F0F0F1, 0x00000000, 6, 0 }, { /* 69 */ 0xED7303B6, 0x00000000, 6, 0 },
{ /* 70 */ 0xEA0EA0EA, 0xEA0EA0EA, 6, 0 }, { /* 71 */ 0xE6C2B449, 0x00000000, 6, 0 },
{ /* 72 */ 0xE38E38E4, 0x00000000, 6, 0 }, { /* 73 */ 0xE070381C, 0xE070381C, 6, 0 },
{ /* 74 */ 0xDD67C8A6, 0xDD67C8A6, 6, 0 }, { /* 75 */ 0xDA740DA8, 0x00000000, 6, 0 },
{ /* 76 */ 0xD79435E5, 0xD79435E5, 6, 0 }, { /* 77 */ 0xD4C77B04, 0x00000000, 6, 0 },
{ /* 78 */ 0xD20D20D2, 0xD20D20D2, 6, 0 }, { /* 79 */ 0xCF6474A9, 0x00000000, 6, 0 },
{ /* 80 */ 0xCCCCCCCD, 0x00000000, 6, 0 }, { /* 81 */ 0xCA4587E7, 0x00000000, 6, 0 },
{ /* 82 */ 0xC7CE0C7D, 0x00000000, 6, 0 }, { /* 83 */ 0xC565C87C, 0x00000000, 6, 0 },
{ /* 84 */ 0xC30C30C3, 0xC30C30C3, 6, 0 }, { /* 85 */ 0xC0C0C0C1, 0x00000000, 6, 0 },
{ /* 86 */ 0xBE82FA0C, 0x00000000, 6, 0 }, { /* 87 */ 0xBC52640C, 0x00000000, 6, 0 },
{ /* 88 */ 0xBA2E8BA3, 0x00000000, 6, 0 }, { /* 89 */ 0xB81702E1, 0x00000000, 6, 0 },
{ /* 90 */ 0xB60B60B6, 0xB60B60B6, 6, 0 }, { /* 91 */ 0xB40B40B4, 0xB40B40B4, 6, 0 },
{ /* 92 */ 0xB21642C9, 0x00000000, 6, 0 }, { /* 93 */ 0xB02C0B03, 0x00000000, 6, 0 },
{ /* 94 */ 0xAE4C415D, 0x00000000, 6, 0 }, { /* 95 */ 0xAC769184, 0xAC769184, 6, 0 },
{ /* 96 */ 0xAAAAAAAB, 0x00000000, 6, 0 }, { /* 97 */ 0xA8E83F57, 0xA8E83F57, 6, 0 },
{ /* 98 */ 0xA72F053A, 0x00000000, 6, 0 }, { /* 99 */ 0xA57EB503, 0x00000000, 6, 0 },
{ /* 100 */ 0xA3D70A3E, 0x00000000, 6, 0 }, { /* 101 */ 0xA237C32B, 0xA237C32B, 6, 0 },
{ /* 102 */ 0xA0A0A0A1, 0x00000000, 6, 0 }, { /* 103 */ 0x9F1165E7, 0x9F1165E7, 6, 0 },
{ /* 104 */ 0x9D89D89E, 0x00000000, 6, 0 }, { /* 105 */ 0x9C09C09C, 0x9C09C09C, 6, 0 },
{ /* 106 */ 0x9A90E7D9, 0x9A90E7D9, 6, 0 }, { /* 107 */ 0x991F1A51, 0x991F1A51, 6, 0 },
{ /* 108 */ 0x97B425ED, 0x97B425ED, 6, 0 }, { /* 109 */ 0x964FDA6C, 0x964FDA6C, 6, 0 },
{ /* 110 */ 0x94F2094F, 0x94F2094F, 6, 0 }, { /* 111 */ 0x939A85C4, 0x939A85C4, 6, 0 },
{ /* 112 */ 0x92492492, 0x92492492, 6, 0 }, { /* 113 */ 0x90FDBC09, 0x90FDBC09, 6, 0 },
{ /* 114 */ 0x8FB823EE, 0x8FB823EE, 6, 0 }, { /* 115 */ 0x8E78356D, 0x8E78356D, 6, 0 },
{ /* 116 */ 0x8D3DCB09, 0x00000000, 6, 0 }, { /* 117 */ 0x8C08C08C, 0x8C08C08C, 6, 0 },
{ /* 118 */ 0x8AD8F2FC, 0x00000000, 6, 0 }, { /* 119 */ 0x89AE408A, 0x00000000, 6, 0 },
{ /* 120 */ 0x88888889, 0x00000000, 6, 0 }, { /* 121 */ 0x8767AB5F, 0x8767AB5F, 6, 0 },
{ /* 122 */ 0x864B8A7E, 0x00000000, 6, 0 }, { /* 123 */ 0x85340853, 0x85340853, 6, 0 },
{ /* 124 */ 0x84210842, 0x84210842, 6, 0 }, { /* 125 */ 0x83126E98, 0x00000000, 6, 0 },
{ /* 126 */ 0x82082082, 0x82082082, 6, 0 }, { /* 127 */ 0x81020408, 0x81020408, 6, 0 },
{ /* 128 */ 0x02000000, 0x00000000, 0, 0 }, { /* 129 */ 0xFE03F810, 0x00000000, 7, 0 },
{ /* 130 */ 0xFC0FC0FD, 0x00000000, 7, 0 }, { /* 131 */ 0xFA232CF3, 0x00000000, 7, 0 },
{ /* 132 */ 0xF83E0F84, 0x00000000, 7, 0 }, { /* 133 */ 0xF6603D99, 0x00000000, 7, 0 },
{ /* 134 */ 0xF4898D60, 0x00000000, 7, 0 }, { /* 135 */ 0xF2B9D649, 0x00000000, 7, 0 },
{ /* 136 */ 0xF0F0F0F1, 0x00000000, 7, 0 }, { /* 137 */ 0xEF2EB720, 0x00000000, 7, 0 },
{ /* 138 */ 0xED7303B6, 0x00000000, 7, 0 }, { /* 139 */ 0xEBBDB2A6, 0x00000000, 7, 0 },
{ /* 140 */ 0xEA0EA0EA, 0xEA0EA0EA, 7, 0 }, { /* 141 */ 0xE865AC7C, 0x00000000, 7, 0 },
{ /* 142 */ 0xE6C2B449, 0x00000000, 7, 0 }, { /* 143 */ 0xE525982B, 0x00000000, 7, 0 },
{ /* 144 */ 0xE38E38E4, 0x00000000, 7, 0 }, { /* 145 */ 0xE1FC780F, 0x00000000, 7, 0 },
{ /* 146 */ 0xE070381C, 0xE070381C, 7, 0 }, { /* 147 */ 0xDEE95C4D, 0x00000000, 7, 0 },
{ /* 148 */ 0xDD67C8A6, 0xDD67C8A6, 7, 0 }, { /* 149 */ 0xDBEB61EF, 0x00000000, 7, 0 },
{ /* 150 */ 0xDA740DA8, 0x00000000, 7, 0 }, { /* 151 */ 0xD901B204, 0x00000000, 7, 0 },
{ /* 152 */ 0xD79435E5, 0xD79435E5, 7, 0 }, { /* 153 */ 0xD62B80D7, 0x00000000, 7, 0 },
{ /* 154 */ 0xD4C77B04, 0x00000000, 7, 0 }, { /* 155 */ 0xD3680D37, 0x00000000, 7, 0 },
{ /* 156 */ 0xD20D20D2, 0xD20D20D2, 7, 0 }, { /* 157 */ 0xD0B69FCC, 0x00000000, 7, 0 },
{ /* 158 */ 0xCF6474A9, 0x00000000, 7, 0 }, { /* 159 */ 0xCE168A77, 0xCE168A77, 7, 0 },
{ /* 160 */ 0xCCCCCCCD, 0x00000000, 7, 0 }, { /* 161 */ 0xCB8727C1, 0x00000000, 7, 0 },
{ /* 162 */ 0xCA4587E7, 0x00000000, 7, 0 }, { /* 163 */ 0xC907DA4F, 0x00000000, 7, 0 },
{ /* 164 */ 0xC7CE0C7D, 0x00000000, 7, 0 }, { /* 165 */ 0xC6980C6A, 0x00000000, 7, 0 },
{ /* 166 */ 0xC565C87C, 0x00000000, 7, 0 }, { /* 167 */ 0xC4372F86, 0x00000000, 7, 0 },
{ /* 168 */ 0xC30C30C3, 0xC30C30C3, 7, 0 }, { /* 169 */ 0xC1E4BBD6, 0x00000000, 7, 0 },
{ /* 170 */ 0xC0C0C0C1, 0x00000000, 7, 0 }, { /* 171 */ 0xBFA02FE8, 0xBFA02FE8, 7, 0 },
{ /* 172 */ 0xBE82FA0C, 0x00000000, 7, 0 }, { /* 173 */ 0xBD691047, 0xBD691047, 7, 0 },
{ /* 174 */ 0xBC52640C, 0x00000000, 7, 0 }, { /* 175 */ 0xBB3EE722, 0x00000000, 7, 0 },
{ /* 176 */ 0xBA2E8BA3, 0x00000000, 7, 0 }, { /* 177 */ 0xB92143FA, 0xB92143FA, 7, 0 },
{ /* 178 */ 0xB81702E1, 0x00000000, 7, 0 }, { /* 179 */ 0xB70FBB5A, 0xB70FBB5A, 7, 0 },
{ /* 180 */ 0xB60B60B6, 0xB60B60B6, 7, 0 }, { /* 181 */ 0xB509E68B, 0x00000000, 7, 0 },
{ /* 182 */ 0xB40B40B4, 0xB40B40B4, 7, 0 }, { /* 183 */ 0xB30F6353, 0x00000000, 7, 0 },
{ /* 184 */ 0xB21642C9, 0x00000000, 7, 0 }, { /* 185 */ 0xB11FD3B8, 0xB11FD3B8, 7, 0 },
{ /* 186 */ 0xB02C0B03, 0x00000000, 7, 0 }, { /* 187 */ 0xAF3ADDC7, 0x00000000, 7, 0 },
{ /* 188 */ 0xAE4C415D, 0x00000000, 7, 0 }, { /* 189 */ 0xAD602B58, 0xAD602B58, 7, 0 },
{ /* 190 */ 0xAC769184, 0xAC769184, 7, 0 }, { /* 191 */ 0xAB8F69E3, 0x00000000, 7, 0 },
{ /* 192 */ 0xAAAAAAAB, 0x00000000, 7, 0 }, { /* 193 */ 0xA9C84A48, 0x00000000, 7, 0 },
{ /* 194 */ 0xA8E83F57, 0xA8E83F57, 7, 0 }, { /* 195 */ 0xA80A80A8, 0xA80A80A8, 7, 0 },
{ /* 196 */ 0xA72F053A, 0x00000000, 7, 0 }, { /* 197 */ 0xA655C439, 0xA655C439, 7, 0 },
{ /* 198 */ 0xA57EB503, 0x00000000, 7, 0 }, { /* 199 */ 0xA4A9CF1E, 0x00000000, 7, 0 },
{ /* 200 */ 0xA3D70A3E, 0x00000000, 7, 0 }, { /* 201 */ 0xA3065E40, 0x00000000, 7, 0 },
{ /* 202 */ 0xA237C32B, 0xA237C32B, 7, 0 }, { /* 203 */ 0xA16B312F, 0x00000000, 7, 0 },
{ /* 204 */ 0xA0A0A0A1, 0x00000000, 7, 0 }, { /* 205 */ 0x9FD809FE, 0x00000000, 7, 0 },
{ /* 206 */ 0x9F1165E7, 0x9F1165E7, 7, 0 }, { /* 207 */ 0x9E4CAD24, 0x00000000, 7, 0 },
{ /* 208 */ 0x9D89D89E, 0x00000000, 7, 0 }, { /* 209 */ 0x9CC8E161, 0x00000000, 7, 0 },
{ /* 210 */ 0x9C09C09C, 0x9C09C09C, 7, 0 }, { /* 211 */ 0x9B4C6F9F, 0x00000000, 7, 0 },
{ /* 212 */ 0x9A90E7D9, 0x9A90E7D9, 7, 0 }, { /* 213 */ 0x99D722DB, 0x00000000, 7, 0 },
{ /* 214 */ 0x991F1A51, 0x991F1A51, 7, 0 }, { /* 215 */ 0x9868C80A, 0x00000000, 7, 0 },
{ /* 216 */ 0x97B425ED, 0x97B425ED, 7, 0 }, { /* 217 */ 0x97012E02, 0x97012E02, 7, 0 },
{ /* 218 */ 0x964FDA6C, 0x964FDA6C, 7, 0 }, { /* 219 */ 0x95A02568, 0x95A02568, 7, 0 },
{ /* 220 */ 0x94F2094F, 0x94F2094F, 7, 0 }, { /* 221 */ 0x94458094, 0x94458094, 7, 0 },
{ /* 222 */ 0x939A85C4, 0x939A85C4, 7, 0 }, { /* 223 */ 0x92F11384, 0x92F11384, 7, 0 },
{ /* 224 */ 0x92492492, 0x92492492, 7, 0 }, { /* 225 */ 0x91A2B3C5, 0x00000000, 7, 0 },
{ /* 226 */ 0x90FDBC09, 0x90FDBC09, 7, 0 }, { /* 227 */ 0x905A3863, 0x905A3863, 7, 0 },
{ /* 228 */ 0x8FB823EE, 0x8FB823EE, 7, 0 }, { /* 229 */ 0x8F1779DA, 0x00000000, 7, 0 },
{ /* 230 */ 0x8E78356D, 0x8E78356D, 7, 0 }, { /* 231 */ 0x8DDA5202, 0x8DDA5202, 7, 0 },
{ /* 232 */ 0x8D3DCB09, 0x00000000, 7, 0 }, { /* 233 */ 0x8CA29C04, 0x8CA29C04, 7, 0 },
{ /* 234 */ 0x8C08C08C, 0x8C08C08C, 7, 0 }, { /* 235 */ 0x8B70344A, 0x8B70344A, 7, 0 },
{ /* 236 */ 0x8AD8F2FC, 0x00000000, 7, 0 }, { /* 237 */ 0x8A42F870, 0x8A42F870, 7, 0 },
{ /* 238 */ 0x89AE408A, 0x00000000, 7, 0 }, { /* 239 */ 0x891AC73B, 0x00000000, 7, 0 },
{ /* 240 */ 0x88888889, 0x00000000, 7, 0 }, { /* 241 */ 0x87F78088, 0x00000000, 7, 0 },
{ /* 242 */ 0x8767AB5F, 0x8767AB5F, 7, 0 }, { /* 243 */ 0x86D90545, 0x00000000, 7, 0 },
{ /* 244 */ 0x864B8A7E, 0x00000000, 7, 0 }, { /* 245 */ 0x85BF3761, 0x85BF3761, 7, 0 },
{ /* 246 */ 0x85340853, 0x85340853, 7, 0 }, { /* 247 */ 0x84A9F9C8, 0x84A9F9C8, 7, 0 },
{ /* 248 */ 0x84210842, 0x84210842, 7, 0 }, { /* 249 */ 0x83993052, 0x83993052, 7, 0 },
{ /* 250 */ 0x83126E98, 0x00000000, 7, 0 }, { /* 251 */ 0x828CBFBF, 0x00000000, 7, 0 },
{ /* 252 */ 0x82082082, 0x82082082, 7, 0 }, { /* 253 */ 0x81848DA9, 0x00000000, 7, 0 },
{ /* 254 */ 0x81020408, 0x81020408, 7, 0 }, { /* 255 */ 0x80808081, 0x00000000, 7, 0 },
{ /* 256 */ 0x01000000, 0x00000000, 0, 0 }, { /* 257 */ 0xFF00FF01, 0x00000000, 8, 0 },
{ /* 258 */ 0xFE03F810, 0x00000000, 8, 0 }, { /* 259 */ 0xFD08E551, 0x00000000, 8, 0 },
{ /* 260 */ 0xFC0FC0FD, 0x00000000, 8, 0 }, { /* 261 */ 0xFB188566, 0x00000000, 8, 0 },
{ /* 262 */ 0xFA232CF3, 0x00000000, 8, 0 }, { /* 263 */ 0xF92FB222, 0x00000000, 8, 0 },
{ /* 264 */ 0xF83E0F84, 0x00000000, 8, 0 }, { /* 265 */ 0xF74E3FC3, 0x00000000, 8, 0 },
{ /* 266 */ 0xF6603D99, 0x00000000, 8, 0 }, { /* 267 */ 0xF57403D6, 0x00000000, 8, 0 },
{ /* 268 */ 0xF4898D60, 0x00000000, 8, 0 }, { /* 269 */ 0xF3A0D52D, 0x00000000, 8, 0 },
{ /* 270 */ 0xF2B9D649, 0x00000000, 8, 0 }, { /* 271 */ 0xF1D48BCF, 0x00000000, 8, 0 },
{ /* 272 */ 0xF0F0F0F1, 0x00000000, 8, 0 }, { /* 273 */ 0xF00F00F0, 0xF00F00F0, 8, 0 },
{ /* 274 */ 0xEF2EB720, 0x00000000, 8, 0 }, { /* 275 */ 0xEE500EE5, 0xEE500EE5, 8, 0 },
{ /* 276 */ 0xED7303B6, 0x00000000, 8, 0 }, { /* 277 */ 0xEC979119, 0x00000000, 8, 0 },
{ /* 278 */ 0xEBBDB2A6, 0x00000000, 8, 0 }, { /* 279 */ 0xEAE56404, 0x00000000, 8, 0 },
{ /* 280 */ 0xEA0EA0EA, 0xEA0EA0EA, 8, 0 }, { /* 281 */ 0xE9396520, 0x00000000, 8, 0 },
{ /* 282 */ 0xE865AC7C, 0x00000000, 8, 0 }, { /* 283 */ 0xE79372E3, 0x00000000, 8, 0 },
{ /* 284 */ 0xE6C2B449, 0x00000000, 8, 0 }, { /* 285 */ 0xE5F36CB0, 0xE5F36CB0, 8, 0 },
{ /* 286 */ 0xE525982B, 0x00000000, 8, 0 }, { /* 287 */ 0xE45932D8, 0x00000000, 8, 0 },
{ /* 288 */ 0xE38E38E4, 0x00000000, 8, 0 }, { /* 289 */ 0xE2C4A689, 0x00000000, 8, 0 },
{ /* 290 */ 0xE1FC780F, 0x00000000, 8, 0 }, { /* 291 */ 0xE135A9CA, 0x00000000, 8, 0 },
{ /* 292 */ 0xE070381C, 0xE070381C, 8, 0 }, { /* 293 */ 0xDFAC1F75, 0x00000000, 8, 0 },
{ /* 294 */ 0xDEE95C4D, 0x00000000, 8, 0 }, { /* 295 */ 0xDE27EB2D, 0x00000000, 8, 0 },
{ /* 296 */ 0xDD67C8A6, 0xDD67C8A6, 8, 0 }, { /* 297 */ 0xDCA8F159, 0x00000000, 8, 0 },
{ /* 298 */ 0xDBEB61EF, 0x00000000, 8, 0 }, { /* 299 */ 0xDB2F171E, 0x00000000, 8, 0 },
{ /* 300 */ 0xDA740DA8, 0x00000000, 8, 0 }, { /* 301 */ 0xD9BA4257, 0x00000000, 8, 0 },
{ /* 302 */ 0xD901B204, 0x00000000, 8, 0 }, { /* 303 */ 0xD84A598F, 0x00000000, 8, 0 },
{ /* 304 */ 0xD79435E5, 0xD79435E5, 8, 0 }, { /* 305 */ 0xD6DF43FD, 0x00000000, 8, 0 },
{ /* 306 */ 0xD62B80D7, 0x00000000, 8, 0 }, { /* 307 */ 0xD578E97D, 0x00000000, 8, 0 },
{ /* 308 */ 0xD4C77B04, 0x00000000, 8, 0 }, { /* 309 */ 0xD417328A, 0x00000000, 8, 0 },
{ /* 310 */ 0xD3680D37, 0x00000000, 8, 0 }, { /* 311 */ 0xD2BA083C, 0x00000000, 8, 0 },
{ /* 312 */ 0xD20D20D2, 0xD20D20D2, 8, 0 }, { /* 313 */ 0xD161543E, 0xD161543E, 8, 0 },
{ /* 314 */ 0xD0B69FCC, 0x00000000, 8, 0 }, { /* 315 */ 0xD00D00D0, 0xD00D00D0, 8, 0 },
{ /* 316 */ 0xCF6474A9, 0x00000000, 8, 0 }, { /* 317 */ 0xCEBCF8BC, 0x00000000, 8, 0 },
{ /* 318 */ 0xCE168A77, 0xCE168A77, 8, 0 }, { /* 319 */ 0xCD712753, 0x00000000, 8, 0 },
{ /* 320 */ 0xCCCCCCCD, 0x00000000, 8, 0 }, { /* 321 */ 0xCC29786D, 0x00000000, 8, 0 },
{ /* 322 */ 0xCB8727C1, 0x00000000, 8, 0 }, { /* 323 */ 0xCAE5D85F, 0xCAE5D85F, 8, 0 },
{ /* 324 */ 0xCA4587E7, 0x00000000, 8, 0 }, { /* 325 */ 0xC9A633FD, 0x00000000, 8, 0 },
{ /* 326 */ 0xC907DA4F, 0x00000000, 8, 0 }, { /* 327 */ 0xC86A7890, 0xC86A7890, 8, 0 },
{ /* 328 */ 0xC7CE0C7D, 0x00000000, 8, 0 }, { /* 329 */ 0xC73293D8, 0x00000000, 8, 0 },
{ /* 330 */ 0xC6980C6A, 0x00000000, 8, 0 }, { /* 331 */ 0xC5FE7403, 0xC5FE7403, 8, 0 },
{ /* 332 */ 0xC565C87C, 0x00000000, 8, 0 }, { /* 333 */ 0xC4CE07B0, 0xC4CE07B0, 8, 0 },
{ /* 334 */ 0xC4372F86, 0x00000000, 8, 0 }, { /* 335 */ 0xC3A13DE6, 0xC3A13DE6, 8, 0 },
{ /* 336 */ 0xC30C30C3, 0xC30C30C3, 8, 0 }, { /* 337 */ 0xC2780614, 0x00000000, 8, 0 },
{ /* 338 */ 0xC1E4BBD6, 0x00000000, 8, 0 }, { /* 339 */ 0xC152500C, 0xC152500C, 8, 0 },
{ /* 340 */ 0xC0C0C0C1, 0x00000000, 8, 0 }, { /* 341 */ 0xC0300C03, 0xC0300C03, 8, 0 },
{ /* 342 */ 0xBFA02FE8, 0xBFA02FE8, 8, 0 }, { /* 343 */ 0xBF112A8B, 0x00000000, 8, 0 },
{ /* 344 */ 0xBE82FA0C, 0x00000000, 8, 0 }, { /* 345 */ 0xBDF59C92, 0x00000000, 8, 0 },
{ /* 346 */ 0xBD691047, 0xBD691047, 8, 0 }, { /* 347 */ 0xBCDD535E, 0x00000000, 8, 0 },
{ /* 348 */ 0xBC52640C, 0x00000000, 8, 0 }, { /* 349 */ 0xBBC8408D, 0x00000000, 8, 0 },
{ /* 350 */ 0xBB3EE722, 0x00000000, 8, 0 }, { /* 351 */ 0xBAB65610, 0xBAB65610, 8, 0 },
{ /* 352 */ 0xBA2E8BA3, 0x00000000, 8, 0 }, { /* 353 */ 0xB9A7862A, 0xB9A7862A, 8, 0 },
{ /* 354 */ 0xB92143FA, 0xB92143FA, 8, 0 }, { /* 355 */ 0xB89BC36D, 0x00000000, 8, 0 },
{ /* 356 */ 0xB81702E1, 0x00000000, 8, 0 }, { /* 357 */ 0xB79300B8, 0x00000000, 8, 0 },
{ /* 358 */ 0xB70FBB5A, 0xB70FBB5A, 8, 0 }, { /* 359 */ 0xB68D3134, 0xB68D3134, 8, 0 },
{ /* 360 */ 0xB60B60B6, 0xB60B60B6, 8, 0 }, { /* 361 */ 0xB58A4855, 0xB58A4855, 8, 0 },
{ /* 362 */ 0xB509E68B, 0x00000000, 8, 0 }, { /* 363 */ 0xB48A39D4, 0xB48A39D4, 8, 0 },
{ /* 364 */ 0xB40B40B4, 0xB40B40B4, 8, 0 }, { /* 365 */ 0xB38CF9B0, 0xB38CF9B0, 8, 0 },
{ /* 366 */ 0xB30F6353, 0x00000000, 8, 0 }, { /* 367 */ 0xB2927C2A, 0x00000000, 8, 0 },
{ /* 368 */ 0xB21642C9, 0x00000000, 8, 0 }, { /* 369 */ 0xB19AB5C5, 0x00000000, 8, 0 },
{ /* 370 */ 0xB11FD3B8, 0xB11FD3B8, 8, 0 }, { /* 371 */ 0xB0A59B42, 0x00000000, 8, 0 },
{ /* 372 */ 0xB02C0B03, 0x00000000, 8, 0 }, { /* 373 */ 0xAFB321A1, 0xAFB321A1, 8, 0 },
{ /* 374 */ 0xAF3ADDC7, 0x00000000, 8, 0 }, { /* 375 */ 0xAEC33E20, 0x00000000, 8, 0 },
{ /* 376 */ 0xAE4C415D, 0x00000000, 8, 0 }, { /* 377 */ 0xADD5E632, 0xADD5E632, 8, 0 },
{ /* 378 */ 0xAD602B58, 0xAD602B58, 8, 0 }, { /* 379 */ 0xACEB0F89, 0xACEB0F89, 8, 0 },
{ /* 380 */ 0xAC769184, 0xAC769184, 8, 0 }, { /* 381 */ 0xAC02B00B, 0x00000000, 8, 0 },
{ /* 382 */ 0xAB8F69E3, 0x00000000, 8, 0 }, { /* 383 */ 0xAB1CBDD4, 0x00000000, 8, 0 },
{ /* 384 */ 0xAAAAAAAB, 0x00000000, 8, 0 }, { /* 385 */ 0xAA392F36, 0x00000000, 8, 0 },
{ /* 386 */ 0xA9C84A48, 0x00000000, 8, 0 }, { /* 387 */ 0xA957FAB5, 0xA957FAB5, 8, 0 },
{ /* 388 */ 0xA8E83F57, 0xA8E83F57, 8, 0 }, { /* 389 */ 0xA8791709, 0x00000000, 8, 0 },
{ /* 390 */ 0xA80A80A8, 0xA80A80A8, 8, 0 }, { /* 391 */ 0xA79C7B17, 0x00000000, 8, 0 },
{ /* 392 */ 0xA72F053A, 0x00000000, 8, 0 }, { /* 393 */ 0xA6C21DF7, 0x00000000, 8, 0 },
{ /* 394 */ 0xA655C439, 0xA655C439, 8, 0 }, { /* 395 */ 0xA5E9F6ED, 0xA5E9F6ED, 8, 0 },
{ /* 396 */ 0xA57EB503, 0x00000000, 8, 0 }, { /* 397 */ 0xA513FD6C, 0x00000000, 8, 0 },
{ /* 398 */ 0xA4A9CF1E, 0x00000000, 8, 0 }, { /* 399 */ 0xA4402910, 0xA4402910, 8, 0 },
{ /* 400 */ 0xA3D70A3E, 0x00000000, 8, 0 }, { /* 401 */ 0xA36E71A3, 0x00000000, 8, 0 },
{ /* 402 */ 0xA3065E40, 0x00000000, 8, 0 }, { /* 403 */ 0xA29ECF16, 0xA29ECF16, 8, 0 },
{ /* 404 */ 0xA237C32B, 0xA237C32B, 8, 0 }, { /* 405 */ 0xA1D13986, 0x00000000, 8, 0 },
{ /* 406 */ 0xA16B312F, 0x00000000, 8, 0 }, { /* 407 */ 0xA105A933, 0x00000000, 8, 0 },
{ /* 408 */ 0xA0A0A0A1, 0x00000000, 8, 0 }, { /* 409 */ 0xA03C1689, 0x00000000, 8, 0 },
{ /* 410 */ 0x9FD809FE, 0x00000000, 8, 0 }, { /* 411 */ 0x9F747A15, 0x9F747A15, 8, 0 },
{ /* 412 */ 0x9F1165E7, 0x9F1165E7, 8, 0 }, { /* 413 */ 0x9EAECC8D, 0x9EAECC8D, 8, 0 },
{ /* 414 */ 0x9E4CAD24, 0x00000000, 8, 0 }, { /* 415 */ 0x9DEB06C9, 0x9DEB06C9, 8, 0 },
{ /* 416 */ 0x9D89D89E, 0x00000000, 8, 0 }, { /* 417 */ 0x9D2921C4, 0x00000000, 8, 0 },
{ /* 418 */ 0x9CC8E161, 0x00000000, 8, 0 }, { /* 419 */ 0x9C69169B, 0x9C69169B, 8, 0 },
{ /* 420 */ 0x9C09C09C, 0x9C09C09C, 8, 0 }, { /* 421 */ 0x9BAADE8E, 0x9BAADE8E, 8, 0 },
{ /* 422 */ 0x9B4C6F9F, 0x00000000, 8, 0 }, { /* 423 */ 0x9AEE72FD, 0x00000000, 8, 0 },
{ /* 424 */ 0x9A90E7D9, 0x9A90E7D9, 8, 0 }, { /* 425 */ 0x9A33CD67, 0x9A33CD67, 8, 0 },
{ /* 426 */ 0x99D722DB, 0x00000000, 8, 0 }, { /* 427 */ 0x997AE76B, 0x997AE76B, 8, 0 },
{ /* 428 */ 0x991F1A51, 0x991F1A51, 8, 0 }, { /* 429 */ 0x98C3BAC7, 0x98C3BAC7, 8, 0 },
{ /* 430 */ 0x9868C80A, 0x00000000, 8, 0 }, { /* 431 */ 0x980E4156, 0x980E4156, 8, 0 },
{ /* 432 */ 0x97B425ED, 0x97B425ED, 8, 0 }, { /* 433 */ 0x975A7510, 0x00000000, 8, 0 },
{ /* 434 */ 0x97012E02, 0x97012E02, 8, 0 }, { /* 435 */ 0x96A8500A, 0x00000000, 8, 0 },
{ /* 436 */ 0x964FDA6C, 0x964FDA6C, 8, 0 }, { /* 437 */ 0x95F7CC73, 0x00000000, 8, 0 },
{ /* 438 */ 0x95A02568, 0x95A02568, 8, 0 }, { /* 439 */ 0x9548E498, 0x00000000, 8, 0 },
{ /* 440 */ 0x94F2094F, 0x94F2094F, 8, 0 }, { /* 441 */ 0x949B92DE, 0x00000000, 8, 0 },
{ /* 442 */ 0x94458094, 0x94458094, 8, 0 }, { /* 443 */ 0x93EFD1C5, 0x93EFD1C5, 8, 0 },
{ /* 444 */ 0x939A85C4, 0x939A85C4, 8, 0 }, { /* 445 */ 0x93459BE7, 0x00000000, 8, 0 },
{ /* 446 */ 0x92F11384, 0x92F11384, 8, 0 }, { /* 447 */ 0x929CEBF5, 0x00000000, 8, 0 },
{ /* 448 */ 0x92492492, 0x92492492, 8, 0 }, { /* 449 */ 0x91F5BCB9, 0x00000000, 8, 0 },
{ /* 450 */ 0x91A2B3C5, 0x00000000, 8, 0 }, { /* 451 */ 0x91500915, 0x91500915, 8, 0 },
{ /* 452 */ 0x90FDBC09, 0x90FDBC09, 8, 0 }, { /* 453 */ 0x90ABCC02, 0x90ABCC02, 8, 0 },
{ /* 454 */ 0x905A3863, 0x905A3863, 8, 0 }, { /* 455 */ 0x90090090, 0x90090090, 8, 0 },
{ /* 456 */ 0x8FB823EE, 0x8FB823EE, 8, 0 }, { /* 457 */ 0x8F67A1E4, 0x00000000, 8, 0 },
{ /* 458 */ 0x8F1779DA, 0x00000000, 8, 0 }, { /* 459 */ 0x8EC7AB3A, 0x00000000, 8, 0 },
{ /* 460 */ 0x8E78356D, 0x8E78356D, 8, 0 }, { /* 461 */ 0x8E2917E1, 0x00000000, 8, 0 },
{ /* 462 */ 0x8DDA5202, 0x8DDA5202, 8, 0 }, { /* 463 */ 0x8D8BE340, 0x00000000, 8, 0 },
{ /* 464 */ 0x8D3DCB09, 0x00000000, 8, 0 }, { /* 465 */ 0x8CF008CF, 0x8CF008CF, 8, 0 },
{ /* 466 */ 0x8CA29C04, 0x8CA29C04, 8, 0 }, { /* 467 */ 0x8C55841D, 0x00000000, 8, 0 },
{ /* 468 */ 0x8C08C08C, 0x8C08C08C, 8, 0 }, { /* 469 */ 0x8BBC50C9, 0x00000000, 8, 0 },
{ /* 470 */ 0x8B70344A, 0x8B70344A, 8, 0 }, { /* 471 */ 0x8B246A88, 0x00000000, 8, 0 },
{ /* 472 */ 0x8AD8F2FC, 0x00000000, 8, 0 }, { /* 473 */ 0x8A8DCD20, 0x00000000, 8, 0 },
{ /* 474 */ 0x8A42F870, 0x8A42F870, 8, 0 }, { /* 475 */ 0x89F8746A, 0x00000000, 8, 0 },
{ /* 476 */ 0x89AE408A, 0x00000000, 8, 0 }, { /* 477 */ 0x89645C4F, 0x89645C4F, 8, 0 },
{ /* 478 */ 0x891AC73B, 0x00000000, 8, 0 }, { /* 479 */ 0x88D180CD, 0x88D180CD, 8, 0 },
{ /* 480 */ 0x88888889, 0x00000000, 8, 0 }, { /* 481 */ 0x883FDDF0, 0x883FDDF0, 8, 0 },
{ /* 482 */ 0x87F78088, 0x00000000, 8, 0 }, { /* 483 */ 0x87AF6FD6, 0x00000000, 8, 0 },
{ /* 484 */ 0x8767AB5F, 0x8767AB5F, 8, 0 }, { /* 485 */ 0x872032AC, 0x872032AC, 8, 0 },
{ /* 486 */ 0x86D90545, 0x00000000, 8, 0 }, { /* 487 */ 0x869222B2, 0x00000000, 8, 0 },
{ /* 488 */ 0x864B8A7E, 0x00000000, 8, 0 }, { /* 489 */ 0x86053C34, 0x86053C34, 8, 0 },
{ /* 490 */ 0x85BF3761, 0x85BF3761, 8, 0 }, { /* 491 */ 0x85797B91, 0x85797B91, 8, 0 },
{ /* 492 */ 0x85340853, 0x85340853, 8, 0 }, { /* 493 */ 0x84EEDD36, 0x00000000, 8, 0 },
{ /* 494 */ 0x84A9F9C8, 0x84A9F9C8, 8, 0 }, { /* 495 */ 0x84655D9C, 0x00000000, 8, 0 },
{ /* 496 */ 0x84210842, 0x84210842, 8, 0 }, { /* 497 */ 0x83DCF94E, 0x00000000, 8, 0 },
{ /* 498 */ 0x83993052, 0x83993052, 8, 0 }, { /* 499 */ 0x8355ACE4, 0x00000000, 8, 0 },
{ /* 500 */ 0x83126E98, 0x00000000, 8, 0 }, { /* 501 */ 0x82CF7504, 0x00000000, 8, 0 },
{ /* 502 */ 0x828CBFBF, 0x00000000, 8, 0 }, { /* 503 */ 0x824A4E61, 0x00000000, 8, 0 },
{ /* 504 */ 0x82082082, 0x82082082, 8, 0 }, { /* 505 */ 0x81C635BC, 0x81C635BC, 8, 0 },
{ /* 506 */ 0x81848DA9, 0x00000000, 8, 0 }, { /* 507 */ 0x814327E4, 0x00000000, 8, 0 },
{ /* 508 */ 0x81020408, 0x81020408, 8, 0 }, { /* 509 */ 0x80C121B3, 0x00000000, 8, 0 },
{ /* 510 */ 0x80808081, 0x00000000, 8, 0 }, { /* 511 */ 0x80402010, 0x80402010, 8, 0 },
};
static const DivRatio32 div_ratio_tbl32[kMaxDivTable] = {
{ /* 0 */ 0x00000000, 0x00000000, 0, 0 }, { /* 1 */ 0xFFFFFFFF, 0xFFFFFFFF, 0, 0 },
{ /* 2 */ 0x80000000, 0x00000000, 0, 0 }, { /* 3 */ 0xAAAAAAAB, 0x00000000, 1, 0 },
{ /* 4 */ 0x40000000, 0x00000000, 0, 0 }, { /* 5 */ 0xCCCCCCCD, 0x00000000, 2, 0 },
{ /* 6 */ 0xAAAAAAAB, 0x00000000, 2, 0 }, { /* 7 */ 0x92492492, 0x6938A22A, 2, 0 },
{ /* 8 */ 0x20000000, 0x00000000, 0, 0 }, { /* 9 */ 0xE38E38E4, 0x00000000, 3, 0 },
{ /* 10 */ 0xCCCCCCCD, 0x00000000, 3, 0 }, { /* 11 */ 0xBA2E8BA3, 0x00000000, 3, 0 },
{ /* 12 */ 0xAAAAAAAB, 0x00000000, 3, 0 }, { /* 13 */ 0x9D89D89E, 0x00000000, 3, 0 },
{ /* 14 */ 0x92492492, 0x6938A22A, 3, 0 }, { /* 15 */ 0x88888889, 0x00000000, 3, 0 },
{ /* 16 */ 0x10000000, 0x00000000, 0, 0 }, { /* 17 */ 0xF0F0F0F1, 0x00000000, 4, 0 },
{ /* 18 */ 0xE38E38E4, 0x00000000, 4, 0 }, { /* 19 */ 0xD79435E5, 0xCD4F8248, 4, 0 },
{ /* 20 */ 0xCCCCCCCD, 0x00000000, 4, 0 }, { /* 21 */ 0xC30C30C3, 0xBABC20C9, 4, 0 },
{ /* 22 */ 0xBA2E8BA3, 0x00000000, 4, 0 }, { /* 23 */ 0xB21642C9, 0x00000000, 4, 0 },
{ /* 24 */ 0xAAAAAAAB, 0x00000000, 4, 0 }, { /* 25 */ 0xA3D70A3E, 0x00000000, 4, 0 },
{ /* 26 */ 0x9D89D89E, 0x00000000, 4, 0 }, { /* 27 */ 0x97B425ED, 0x92D7F3F9, 4, 0 },
{ /* 28 */ 0x92492492, 0x6938A22A, 4, 0 }, { /* 29 */ 0x8D3DCB09, 0x00000000, 4, 0 },
{ /* 30 */ 0x88888889, 0x00000000, 4, 0 }, { /* 31 */ 0x84210842, 0x7C43E5B3, 4, 0 },
{ /* 32 */ 0x08000000, 0x00000000, 0, 0 }, { /* 33 */ 0xF83E0F84, 0x00000000, 5, 0 },
{ /* 34 */ 0xF0F0F0F1, 0x00000000, 5, 0 }, { /* 35 */ 0xEA0EA0EA, 0xDDDA4CD2, 5, 0 },
{ /* 36 */ 0xE38E38E4, 0x00000000, 5, 0 }, { /* 37 */ 0xDD67C8A6, 0xD28B691D, 5, 0 },
{ /* 38 */ 0xD79435E5, 0xCD4F8248, 5, 0 }, { /* 39 */ 0xD20D20D2, 0xC85465C4, 5, 0 },
{ /* 40 */ 0xCCCCCCCD, 0x00000000, 5, 0 }, { /* 41 */ 0xC7CE0C7D, 0x00000000, 5, 0 },
{ /* 42 */ 0xC30C30C3, 0xBABC20C9, 5, 0 }, { /* 43 */ 0xBE82FA0C, 0x00000000, 5, 0 },
{ /* 44 */ 0xBA2E8BA3, 0x00000000, 5, 0 }, { /* 45 */ 0xB60B60B6, 0xAEDD2228, 5, 0 },
{ /* 46 */ 0xB21642C9, 0x00000000, 5, 0 }, { /* 47 */ 0xAE4C415D, 0x00000000, 5, 0 },
{ /* 48 */ 0xAAAAAAAB, 0x00000000, 5, 0 }, { /* 49 */ 0xA72F053A, 0x00000000, 5, 0 },
{ /* 50 */ 0xA3D70A3E, 0x00000000, 5, 0 }, { /* 51 */ 0xA0A0A0A1, 0x00000000, 5, 0 },
{ /* 52 */ 0x9D89D89E, 0x00000000, 5, 0 }, { /* 53 */ 0x9A90E7D9, 0x63EDABB9, 5, 0 },
{ /* 54 */ 0x97B425ED, 0x92D7F3F9, 5, 0 }, { /* 55 */ 0x94F2094F, 0x82BBC5D7, 5, 0 },
{ /* 56 */ 0x92492492, 0x6938A22A, 5, 0 }, { /* 57 */ 0x8FB823EE, 0x8B652615, 5, 0 },
{ /* 58 */ 0x8D3DCB09, 0x00000000, 5, 0 }, { /* 59 */ 0x8AD8F2FC, 0x00000000, 5, 0 },
{ /* 60 */ 0x88888889, 0x00000000, 5, 0 }, { /* 61 */ 0x864B8A7E, 0x00000000, 5, 0 },
{ /* 62 */ 0x84210842, 0x7C43E5B3, 5, 0 }, { /* 63 */ 0x82082082, 0x7E8DCD3B, 5, 0 },
{ /* 64 */ 0x04000000, 0x00000000, 0, 0 }, { /* 65 */ 0xFC0FC0FD, 0x00000000, 6, 0 },
{ /* 66 */ 0xF83E0F84, 0x00000000, 6, 0 }, { /* 67 */ 0xF4898D60, 0x00000000, 6, 0 },
{ /* 68 */ 0xF0F0F0F1, 0x00000000, 6, 0 }, { /* 69 */ 0xED7303B6, 0x00000000, 6, 0 },
{ /* 70 */ 0xEA0EA0EA, 0xDDDA4CD2, 6, 0 }, { /* 71 */ 0xE6C2B449, 0x00000000, 6, 0 },
{ /* 72 */ 0xE38E38E4, 0x00000000, 6, 0 }, { /* 73 */ 0xE070381C, 0xD54336DB, 6, 0 },
{ /* 74 */ 0xDD67C8A6, 0xD28B691D, 6, 0 }, { /* 75 */ 0xDA740DA8, 0x00000000, 6, 0 },
{ /* 76 */ 0xD79435E5, 0xCD4F8248, 6, 0 }, { /* 77 */ 0xD4C77B04, 0x00000000, 6, 0 },
{ /* 78 */ 0xD20D20D2, 0xC85465C4, 6, 0 }, { /* 79 */ 0xCF6474A9, 0x00000000, 6, 0 },
{ /* 80 */ 0xCCCCCCCD, 0x00000000, 6, 0 }, { /* 81 */ 0xCA4587E7, 0x00000000, 6, 0 },
{ /* 82 */ 0xC7CE0C7D, 0x00000000, 6, 0 }, { /* 83 */ 0xC565C87C, 0x00000000, 6, 0 },
{ /* 84 */ 0xC30C30C3, 0xBABC20C9, 6, 0 }, { /* 85 */ 0xC0C0C0C1, 0x00000000, 6, 0 },
{ /* 86 */ 0xBE82FA0C, 0x00000000, 6, 0 }, { /* 87 */ 0xBC52640C, 0x00000000, 6, 0 },
{ /* 88 */ 0xBA2E8BA3, 0x00000000, 6, 0 }, { /* 89 */ 0xB81702E1, 0x00000000, 6, 0 },
{ /* 90 */ 0xB60B60B6, 0xAEDD2228, 6, 0 }, { /* 91 */ 0xB40B40B4, 0xAD07B849, 6, 0 },
{ /* 92 */ 0xB21642C9, 0x00000000, 6, 0 }, { /* 93 */ 0xB02C0B03, 0x00000000, 6, 0 },
{ /* 94 */ 0xAE4C415D, 0x00000000, 6, 0 }, { /* 95 */ 0xAC769184, 0xA6105997, 6, 0 },
{ /* 96 */ 0xAAAAAAAB, 0x00000000, 6, 0 }, { /* 97 */ 0xA8E83F57, 0x9A147789, 6, 0 },
{ /* 98 */ 0xA72F053A, 0x00000000, 6, 0 }, { /* 99 */ 0xA57EB503, 0x00000000, 6, 0 },
{ /* 100 */ 0xA3D70A3E, 0x00000000, 6, 0 }, { /* 101 */ 0xA237C32B, 0x9492E852, 6, 0 },
{ /* 102 */ 0xA0A0A0A1, 0x00000000, 6, 0 }, { /* 103 */ 0x9F1165E7, 0x88B2B450, 6, 0 },
{ /* 104 */ 0x9D89D89E, 0x00000000, 6, 0 }, { /* 105 */ 0x9C09C09C, 0x96DFBCFA, 6, 0 },
{ /* 106 */ 0x9A90E7D9, 0x63EDABB9, 6, 0 }, { /* 107 */ 0x991F1A51, 0x64F044B4, 6, 0 },
{ /* 108 */ 0x97B425ED, 0x92D7F3F9, 6, 0 }, { /* 109 */ 0x964FDA6C, 0x918C25D4, 6, 0 },
{ /* 110 */ 0x94F2094F, 0x82BBC5D7, 6, 0 }, { /* 111 */ 0x939A85C4, 0x8F05C755, 6, 0 },
{ /* 112 */ 0x92492492, 0x6938A22A, 6, 0 }, { /* 113 */ 0x90FDBC09, 0x88BBFE97, 6, 0 },
{ /* 114 */ 0x8FB823EE, 0x8B652615, 6, 0 }, { /* 115 */ 0x8E78356D, 0x84083914, 6, 0 },
{ /* 116 */ 0x8D3DCB09, 0x00000000, 6, 0 }, { /* 117 */ 0x8C08C08C, 0x87F265C4, 6, 0 },
{ /* 118 */ 0x8AD8F2FC, 0x00000000, 6, 0 }, { /* 119 */ 0x89AE408A, 0x00000000, 6, 0 },
{ /* 120 */ 0x88888889, 0x00000000, 6, 0 }, { /* 121 */ 0x8767AB5F, 0x6C1B1295, 6, 0 },
{ /* 122 */ 0x864B8A7E, 0x00000000, 6, 0 }, { /* 123 */ 0x85340853, 0x644C372D, 6, 0 },
{ /* 124 */ 0x84210842, 0x7C43E5B3, 6, 0 }, { /* 125 */ 0x83126E98, 0x00000000, 6, 0 },
{ /* 126 */ 0x82082082, 0x7E8DCD3B, 6, 0 }, { /* 127 */ 0x81020408, 0x7986C452, 6, 0 },
{ /* 128 */ 0x02000000, 0x00000000, 0, 0 }, { /* 129 */ 0xFE03F810, 0x00000000, 7, 0 },
{ /* 130 */ 0xFC0FC0FD, 0x00000000, 7, 0 }, { /* 131 */ 0xFA232CF3, 0x00000000, 7, 0 },
{ /* 132 */ 0xF83E0F84, 0x00000000, 7, 0 }, { /* 133 */ 0xF6603D99, 0x00000000, 7, 0 },
{ /* 134 */ 0xF4898D60, 0x00000000, 7, 0 }, { /* 135 */ 0xF2B9D649, 0x00000000, 7, 0 },
{ /* 136 */ 0xF0F0F0F1, 0x00000000, 7, 0 }, { /* 137 */ 0xEF2EB720, 0x00000000, 7, 0 },
{ /* 138 */ 0xED7303B6, 0x00000000, 7, 0 }, { /* 139 */ 0xEBBDB2A6, 0x00000000, 7, 0 },
{ /* 140 */ 0xEA0EA0EA, 0xDDDA4CD2, 7, 0 }, { /* 141 */ 0xE865AC7C, 0x00000000, 7, 0 },
{ /* 142 */ 0xE6C2B449, 0x00000000, 7, 0 }, { /* 143 */ 0xE525982B, 0x00000000, 7, 0 },
{ /* 144 */ 0xE38E38E4, 0x00000000, 7, 0 }, { /* 145 */ 0xE1FC780F, 0x00000000, 7, 0 },
{ /* 146 */ 0xE070381C, 0xD54336DB, 7, 0 }, { /* 147 */ 0xDEE95C4D, 0x00000000, 7, 0 },
{ /* 148 */ 0xDD67C8A6, 0xD28B691D, 7, 0 }, { /* 149 */ 0xDBEB61EF, 0x00000000, 7, 0 },
{ /* 150 */ 0xDA740DA8, 0x00000000, 7, 0 }, { /* 151 */ 0xD901B204, 0x00000000, 7, 0 },
{ /* 152 */ 0xD79435E5, 0xCD4F8248, 7, 0 }, { /* 153 */ 0xD62B80D7, 0x00000000, 7, 0 },
{ /* 154 */ 0xD4C77B04, 0x00000000, 7, 0 }, { /* 155 */ 0xD3680D37, 0x00000000, 7, 0 },
{ /* 156 */ 0xD20D20D2, 0xC85465C4, 7, 0 }, { /* 157 */ 0xD0B69FCC, 0x00000000, 7, 0 },
{ /* 158 */ 0xCF6474A9, 0x00000000, 7, 0 }, { /* 159 */ 0xCE168A77, 0xB14E984F, 7, 0 },
{ /* 160 */ 0xCCCCCCCD, 0x00000000, 7, 0 }, { /* 161 */ 0xCB8727C1, 0x00000000, 7, 0 },
{ /* 162 */ 0xCA4587E7, 0x00000000, 7, 0 }, { /* 163 */ 0xC907DA4F, 0x00000000, 7, 0 },
{ /* 164 */ 0xC7CE0C7D, 0x00000000, 7, 0 }, { /* 165 */ 0xC6980C6A, 0x00000000, 7, 0 },
{ /* 166 */ 0xC565C87C, 0x00000000, 7, 0 }, { /* 167 */ 0xC4372F86, 0x00000000, 7, 0 },
{ /* 168 */ 0xC30C30C3, 0xBABC20C9, 7, 0 }, { /* 169 */ 0xC1E4BBD6, 0x00000000, 7, 0 },
{ /* 170 */ 0xC0C0C0C1, 0x00000000, 7, 0 }, { /* 171 */ 0xBFA02FE8, 0xB79E7117, 7, 0 },
{ /* 172 */ 0xBE82FA0C, 0x00000000, 7, 0 }, { /* 173 */ 0xBD691047, 0xB8E21743, 7, 0 },
{ /* 174 */ 0xBC52640C, 0x00000000, 7, 0 }, { /* 175 */ 0xBB3EE722, 0x00000000, 7, 0 },
{ /* 176 */ 0xBA2E8BA3, 0x00000000, 7, 0 }, { /* 177 */ 0xB92143FA, 0x924F680F, 7, 0 },
{ /* 178 */ 0xB81702E1, 0x00000000, 7, 0 }, { /* 179 */ 0xB70FBB5A, 0xA5917F18, 7, 0 },
{ /* 180 */ 0xB60B60B6, 0xAEDD2228, 7, 0 }, { /* 181 */ 0xB509E68B, 0x00000000, 7, 0 },
{ /* 182 */ 0xB40B40B4, 0xAD07B849, 7, 0 }, { /* 183 */ 0xB30F6353, 0x00000000, 7, 0 },
{ /* 184 */ 0xB21642C9, 0x00000000, 7, 0 }, { /* 185 */ 0xB11FD3B8, 0xAA59BB65, 7, 0 },
{ /* 186 */ 0xB02C0B03, 0x00000000, 7, 0 }, { /* 187 */ 0xAF3ADDC7, 0x00000000, 7, 0 },
{ /* 188 */ 0xAE4C415D, 0x00000000, 7, 0 }, { /* 189 */ 0xAD602B58, 0xA6E76529, 7, 0 },
{ /* 190 */ 0xAC769184, 0xA6105997, 7, 0 }, { /* 191 */ 0xAB8F69E3, 0x00000000, 7, 0 },
{ /* 192 */ 0xAAAAAAAB, 0x00000000, 7, 0 }, { /* 193 */ 0xA9C84A48, 0x00000000, 7, 0 },
{ /* 194 */ 0xA8E83F57, 0x9A147789, 7, 0 }, { /* 195 */ 0xA80A80A8, 0xA1FCBBC2, 7, 0 },
{ /* 196 */ 0xA72F053A, 0x00000000, 7, 0 }, { /* 197 */ 0xA655C439, 0x899D6309, 7, 0 },
{ /* 198 */ 0xA57EB503, 0x00000000, 7, 0 }, { /* 199 */ 0xA4A9CF1E, 0x00000000, 7, 0 },
{ /* 200 */ 0xA3D70A3E, 0x00000000, 7, 0 }, { /* 201 */ 0xA3065E40, 0x00000000, 7, 0 },
{ /* 202 */ 0xA237C32B, 0x9492E852, 7, 0 }, { /* 203 */ 0xA16B312F, 0x00000000, 7, 0 },
{ /* 204 */ 0xA0A0A0A1, 0x00000000, 7, 0 }, { /* 205 */ 0x9FD809FE, 0x00000000, 7, 0 },
{ /* 206 */ 0x9F1165E7, 0x88B2B450, 7, 0 }, { /* 207 */ 0x9E4CAD24, 0x00000000, 7, 0 },
{ /* 208 */ 0x9D89D89E, 0x00000000, 7, 0 }, { /* 209 */ 0x9CC8E161, 0x00000000, 7, 0 },
{ /* 210 */ 0x9C09C09C, 0x96DFBCFA, 7, 0 }, { /* 211 */ 0x9B4C6F9F, 0x00000000, 7, 0 },
{ /* 212 */ 0x9A90E7D9, 0x63EDABB9, 7, 0 }, { /* 213 */ 0x99D722DB, 0x00000000, 7, 0 },
{ /* 214 */ 0x991F1A51, 0x64F044B4, 7, 0 }, { /* 215 */ 0x9868C80A, 0x00000000, 7, 0 },
{ /* 216 */ 0x97B425ED, 0x92D7F3F9, 7, 0 }, { /* 217 */ 0x97012E02, 0x617B4216, 7, 0 },
{ /* 218 */ 0x964FDA6C, 0x918C25D4, 7, 0 }, { /* 219 */ 0x95A02568, 0x90E86DBA, 7, 0 },
{ /* 220 */ 0x94F2094F, 0x82BBC5D7, 7, 0 }, { /* 221 */ 0x94458094, 0x6CC215E5, 7, 0 },
{ /* 222 */ 0x939A85C4, 0x8F05C755, 7, 0 }, { /* 223 */ 0x92F11384, 0x910A6A75, 7, 0 },
{ /* 224 */ 0x92492492, 0x6938A22A, 7, 0 }, { /* 225 */ 0x91A2B3C5, 0x00000000, 7, 0 },
{ /* 226 */ 0x90FDBC09, 0x88BBFE97, 7, 0 }, { /* 227 */ 0x905A3863, 0x6E19535E, 7, 0 },
{ /* 228 */ 0x8FB823EE, 0x8B652615, 7, 0 }, { /* 229 */ 0x8F1779DA, 0x00000000, 7, 0 },
{ /* 230 */ 0x8E78356D, 0x84083914, 7, 0 }, { /* 231 */ 0x8DDA5202, 0x6FDBA642, 7, 0 },
{ /* 232 */ 0x8D3DCB09, 0x00000000, 7, 0 }, { /* 233 */ 0x8CA29C04, 0x55CEFFF7, 7, 0 },
{ /* 234 */ 0x8C08C08C, 0x87F265C4, 7, 0 }, { /* 235 */ 0x8B70344A, 0x81748207, 7, 0 },
{ /* 236 */ 0x8AD8F2FC, 0x00000000, 7, 0 }, { /* 237 */ 0x8A42F870, 0x5C4846A5, 7, 0 },
{ /* 238 */ 0x89AE408A, 0x00000000, 7, 0 }, { /* 239 */ 0x891AC73B, 0x00000000, 7, 0 },
{ /* 240 */ 0x88888889, 0x00000000, 7, 0 }, { /* 241 */ 0x87F78088, 0x00000000, 7, 0 },
{ /* 242 */ 0x8767AB5F, 0x6C1B1295, 7, 0 }, { /* 243 */ 0x86D90545, 0x00000000, 7, 0 },
{ /* 244 */ 0x864B8A7E, 0x00000000, 7, 0 }, { /* 245 */ 0x85BF3761, 0x6EF1149F, 7, 0 },
{ /* 246 */ 0x85340853, 0x644C372D, 7, 0 }, { /* 247 */ 0x84A9F9C8, 0x8107CD75, 7, 0 },
{ /* 248 */ 0x84210842, 0x7C43E5B3, 7, 0 }, { /* 249 */ 0x83993052, 0x637D2978, 7, 0 },
{ /* 250 */ 0x83126E98, 0x00000000, 7, 0 }, { /* 251 */ 0x828CBFBF, 0x00000000, 7, 0 },
{ /* 252 */ 0x82082082, 0x7E8DCD3B, 7, 0 }, { /* 253 */ 0x81848DA9, 0x00000000, 7, 0 },
{ /* 254 */ 0x81020408, 0x7986C452, 7, 0 }, { /* 255 */ 0x80808081, 0x00000000, 7, 0 },
{ /* 256 */ 0x01000000, 0x00000000, 0, 0 }, { /* 257 */ 0xFF00FF01, 0x00000000, 8, 0 },
{ /* 258 */ 0xFE03F810, 0x00000000, 8, 0 }, { /* 259 */ 0xFD08E551, 0x00000000, 8, 0 },
{ /* 260 */ 0xFC0FC0FD, 0x00000000, 8, 0 }, { /* 261 */ 0xFB188566, 0x00000000, 8, 0 },
{ /* 262 */ 0xFA232CF3, 0x00000000, 8, 0 }, { /* 263 */ 0xF92FB222, 0x00000000, 8, 0 },
{ /* 264 */ 0xF83E0F84, 0x00000000, 8, 0 }, { /* 265 */ 0xF74E3FC3, 0x00000000, 8, 0 },
{ /* 266 */ 0xF6603D99, 0x00000000, 8, 0 }, { /* 267 */ 0xF57403D6, 0x00000000, 8, 0 },
{ /* 268 */ 0xF4898D60, 0x00000000, 8, 0 }, { /* 269 */ 0xF3A0D52D, 0x00000000, 8, 0 },
{ /* 270 */ 0xF2B9D649, 0x00000000, 8, 0 }, { /* 271 */ 0xF1D48BCF, 0x00000000, 8, 0 },
{ /* 272 */ 0xF0F0F0F1, 0x00000000, 8, 0 }, { /* 273 */ 0xF00F00F0, 0xE330852D, 8, 0 },
{ /* 274 */ 0xEF2EB720, 0x00000000, 8, 0 }, { /* 275 */ 0xEE500EE5, 0xEE500EE5, 8, 0 },
{ /* 276 */ 0xED7303B6, 0x00000000, 8, 0 }, { /* 277 */ 0xEC979119, 0x00000000, 8, 0 },
{ /* 278 */ 0xEBBDB2A6, 0x00000000, 8, 0 }, { /* 279 */ 0xEAE56404, 0x00000000, 8, 0 },
{ /* 280 */ 0xEA0EA0EA, 0xDDDA4CD2, 8, 0 }, { /* 281 */ 0xE9396520, 0x00000000, 8, 0 },
{ /* 282 */ 0xE865AC7C, 0x00000000, 8, 0 }, { /* 283 */ 0xE79372E3, 0x00000000, 8, 0 },
{ /* 284 */ 0xE6C2B449, 0x00000000, 8, 0 }, { /* 285 */ 0xE5F36CB0, 0xDA30EC7F, 8, 0 },
{ /* 286 */ 0xE525982B, 0x00000000, 8, 0 }, { /* 287 */ 0xE45932D8, 0x00000000, 8, 0 },
{ /* 288 */ 0xE38E38E4, 0x00000000, 8, 0 }, { /* 289 */ 0xE2C4A689, 0x00000000, 8, 0 },
{ /* 290 */ 0xE1FC780F, 0x00000000, 8, 0 }, { /* 291 */ 0xE135A9CA, 0x00000000, 8, 0 },
{ /* 292 */ 0xE070381C, 0xD54336DB, 8, 0 }, { /* 293 */ 0xDFAC1F75, 0x00000000, 8, 0 },
{ /* 294 */ 0xDEE95C4D, 0x00000000, 8, 0 }, { /* 295 */ 0xDE27EB2D, 0x00000000, 8, 0 },
{ /* 296 */ 0xDD67C8A6, 0xD28B691D, 8, 0 }, { /* 297 */ 0xDCA8F159, 0x00000000, 8, 0 },
{ /* 298 */ 0xDBEB61EF, 0x00000000, 8, 0 }, { /* 299 */ 0xDB2F171E, 0x00000000, 8, 0 },
{ /* 300 */ 0xDA740DA8, 0x00000000, 8, 0 }, { /* 301 */ 0xD9BA4257, 0x00000000, 8, 0 },
{ /* 302 */ 0xD901B204, 0x00000000, 8, 0 }, { /* 303 */ 0xD84A598F, 0x00000000, 8, 0 },
{ /* 304 */ 0xD79435E5, 0xCD4F8248, 8, 0 }, { /* 305 */ 0xD6DF43FD, 0x00000000, 8, 0 },
{ /* 306 */ 0xD62B80D7, 0x00000000, 8, 0 }, { /* 307 */ 0xD578E97D, 0x00000000, 8, 0 },
{ /* 308 */ 0xD4C77B04, 0x00000000, 8, 0 }, { /* 309 */ 0xD417328A, 0x00000000, 8, 0 },
{ /* 310 */ 0xD3680D37, 0x00000000, 8, 0 }, { /* 311 */ 0xD2BA083C, 0x00000000, 8, 0 },
{ /* 312 */ 0xD20D20D2, 0xC85465C4, 8, 0 }, { /* 313 */ 0xD161543E, 0xB0FAD2B5, 8, 0 },
{ /* 314 */ 0xD0B69FCC, 0x00000000, 8, 0 }, { /* 315 */ 0xD00D00D0, 0xC685FCC5, 8, 0 },
{ /* 316 */ 0xCF6474A9, 0x00000000, 8, 0 }, { /* 317 */ 0xCEBCF8BC, 0x00000000, 8, 0 },
{ /* 318 */ 0xCE168A77, 0xB14E984F, 8, 0 }, { /* 319 */ 0xCD712753, 0x00000000, 8, 0 },
{ /* 320 */ 0xCCCCCCCD, 0x00000000, 8, 0 }, { /* 321 */ 0xCC29786D, 0x00000000, 8, 0 },
{ /* 322 */ 0xCB8727C1, 0x00000000, 8, 0 }, { /* 323 */ 0xCAE5D85F, 0xB5ED2E5D, 8, 0 },
{ /* 324 */ 0xCA4587E7, 0x00000000, 8, 0 }, { /* 325 */ 0xC9A633FD, 0x00000000, 8, 0 },
{ /* 326 */ 0xC907DA4F, 0x00000000, 8, 0 }, { /* 327 */ 0xC86A7890, 0xBF9C984D, 8, 0 },
{ /* 328 */ 0xC7CE0C7D, 0x00000000, 8, 0 }, { /* 329 */ 0xC73293D8, 0x00000000, 8, 0 },
{ /* 330 */ 0xC6980C6A, 0x00000000, 8, 0 }, { /* 331 */ 0xC5FE7403, 0xB470D0D8, 8, 0 },
{ /* 332 */ 0xC565C87C, 0x00000000, 8, 0 }, { /* 333 */ 0xC4CE07B0, 0xBC552E96, 8, 0 },
{ /* 334 */ 0xC4372F86, 0x00000000, 8, 0 }, { /* 335 */ 0xC3A13DE6, 0xC11AABA8, 8, 0 },
{ /* 336 */ 0xC30C30C3, 0xBABC20C9, 8, 0 }, { /* 337 */ 0xC2780614, 0x00000000, 8, 0 },
{ /* 338 */ 0xC1E4BBD6, 0x00000000, 8, 0 }, { /* 339 */ 0xC152500C, 0xB252119D, 8, 0 },
{ /* 340 */ 0xC0C0C0C1, 0x00000000, 8, 0 }, { /* 341 */ 0xC0300C03, 0xC0300C03, 8, 0 },
{ /* 342 */ 0xBFA02FE8, 0xB79E7117, 8, 0 }, { /* 343 */ 0xBF112A8B, 0x00000000, 8, 0 },
{ /* 344 */ 0xBE82FA0C, 0x00000000, 8, 0 }, { /* 345 */ 0xBDF59C92, 0x00000000, 8, 0 },
{ /* 346 */ 0xBD691047, 0xB8E21743, 8, 0 }, { /* 347 */ 0xBCDD535E, 0x00000000, 8, 0 },
{ /* 348 */ 0xBC52640C, 0x00000000, 8, 0 }, { /* 349 */ 0xBBC8408D, 0x00000000, 8, 0 },
{ /* 350 */ 0xBB3EE722, 0x00000000, 8, 0 }, { /* 351 */ 0xBAB65610, 0xB3227C7F, 8, 0 },
{ /* 352 */ 0xBA2E8BA3, 0x00000000, 8, 0 }, { /* 353 */ 0xB9A7862A, 0xAF031B3B, 8, 0 },
{ /* 354 */ 0xB92143FA, 0x924F680F, 8, 0 }, { /* 355 */ 0xB89BC36D, 0x00000000, 8, 0 },
{ /* 356 */ 0xB81702E1, 0x00000000, 8, 0 }, { /* 357 */ 0xB79300B8, 0x00000000, 8, 0 },
{ /* 358 */ 0xB70FBB5A, 0xA5917F18, 8, 0 }, { /* 359 */ 0xB68D3134, 0xAD4B5673, 8, 0 },
{ /* 360 */ 0xB60B60B6, 0xAEDD2228, 8, 0 }, { /* 361 */ 0xB58A4855, 0xA4D8D64B, 8, 0 },
{ /* 362 */ 0xB509E68B, 0x00000000, 8, 0 }, { /* 363 */ 0xB48A39D4, 0x83B505FC, 8, 0 },
{ /* 364 */ 0xB40B40B4, 0xAD07B849, 8, 0 }, { /* 365 */ 0xB38CF9B0, 0xAC93E5AE, 8, 0 },
{ /* 366 */ 0xB30F6353, 0x00000000, 8, 0 }, { /* 367 */ 0xB2927C2A, 0x00000000, 8, 0 },
{ /* 368 */ 0xB21642C9, 0x00000000, 8, 0 }, { /* 369 */ 0xB19AB5C5, 0x00000000, 8, 0 },
{ /* 370 */ 0xB11FD3B8, 0xAA59BB65, 8, 0 }, { /* 371 */ 0xB0A59B42, 0x00000000, 8, 0 },
{ /* 372 */ 0xB02C0B03, 0x00000000, 8, 0 }, { /* 373 */ 0xAFB321A1, 0x7E2D2A91, 8, 0 },
{ /* 374 */ 0xAF3ADDC7, 0x00000000, 8, 0 }, { /* 375 */ 0xAEC33E20, 0x00000000, 8, 0 },
{ /* 376 */ 0xAE4C415D, 0x00000000, 8, 0 }, { /* 377 */ 0xADD5E632, 0x835C71C6, 8, 0 },
{ /* 378 */ 0xAD602B58, 0xA6E76529, 8, 0 }, { /* 379 */ 0xACEB0F89, 0x9940699B, 8, 0 },
{ /* 380 */ 0xAC769184, 0xA6105997, 8, 0 }, { /* 381 */ 0xAC02B00B, 0x00000000, 8, 0 },
{ /* 382 */ 0xAB8F69E3, 0x00000000, 8, 0 }, { /* 383 */ 0xAB1CBDD4, 0x00000000, 8, 0 },
{ /* 384 */ 0xAAAAAAAB, 0x00000000, 8, 0 }, { /* 385 */ 0xAA392F36, 0x00000000, 8, 0 },
{ /* 386 */ 0xA9C84A48, 0x00000000, 8, 0 }, { /* 387 */ 0xA957FAB5, 0x7FBEBD3E, 8, 0 },
{ /* 388 */ 0xA8E83F57, 0x9A147789, 8, 0 }, { /* 389 */ 0xA8791709, 0x00000000, 8, 0 },
{ /* 390 */ 0xA80A80A8, 0xA1FCBBC2, 8, 0 }, { /* 391 */ 0xA79C7B17, 0x00000000, 8, 0 },
{ /* 392 */ 0xA72F053A, 0x00000000, 8, 0 }, { /* 393 */ 0xA6C21DF7, 0x00000000, 8, 0 },
{ /* 394 */ 0xA655C439, 0x899D6309, 8, 0 }, { /* 395 */ 0xA5E9F6ED, 0x84B87BC1, 8, 0 },
{ /* 396 */ 0xA57EB503, 0x00000000, 8, 0 }, { /* 397 */ 0xA513FD6C, 0x00000000, 8, 0 },
{ /* 398 */ 0xA4A9CF1E, 0x00000000, 8, 0 }, { /* 399 */ 0xA4402910, 0x9E7C426A, 8, 0 },
{ /* 400 */ 0xA3D70A3E, 0x00000000, 8, 0 }, { /* 401 */ 0xA36E71A3, 0x00000000, 8, 0 },
{ /* 402 */ 0xA3065E40, 0x00000000, 8, 0 }, { /* 403 */ 0xA29ECF16, 0x7D808D0C, 8, 0 },
{ /* 404 */ 0xA237C32B, 0x9492E852, 8, 0 }, { /* 405 */ 0xA1D13986, 0x00000000, 8, 0 },
{ /* 406 */ 0xA16B312F, 0x00000000, 8, 0 }, { /* 407 */ 0xA105A933, 0x00000000, 8, 0 },
{ /* 408 */ 0xA0A0A0A1, 0x00000000, 8, 0 }, { /* 409 */ 0xA03C1689, 0x00000000, 8, 0 },
{ /* 410 */ 0x9FD809FE, 0x00000000, 8, 0 }, { /* 411 */ 0x9F747A15, 0x83EE3A17, 8, 0 },
{ /* 412 */ 0x9F1165E7, 0x88B2B450, 8, 0 }, { /* 413 */ 0x9EAECC8D, 0x6B9B462C, 8, 0 },
{ /* 414 */ 0x9E4CAD24, 0x00000000, 8, 0 }, { /* 415 */ 0x9DEB06C9, 0x8F1B2A8F, 8, 0 },
{ /* 416 */ 0x9D89D89E, 0x00000000, 8, 0 }, { /* 417 */ 0x9D2921C4, 0x00000000, 8, 0 },
{ /* 418 */ 0x9CC8E161, 0x00000000, 8, 0 }, { /* 419 */ 0x9C69169B, 0x7FB3C7DA, 8, 0 },
{ /* 420 */ 0x9C09C09C, 0x96DFBCFA, 8, 0 }, { /* 421 */ 0x9BAADE8E, 0x6F55E409, 8, 0 },
{ /* 422 */ 0x9B4C6F9F, 0x00000000, 8, 0 }, { /* 423 */ 0x9AEE72FD, 0x00000000, 8, 0 },
{ /* 424 */ 0x9A90E7D9, 0x63EDABB9, 8, 0 }, { /* 425 */ 0x9A33CD67, 0x9A33CD67, 8, 0 },
{ /* 426 */ 0x99D722DB, 0x00000000, 8, 0 }, { /* 427 */ 0x997AE76B, 0x69B92CFD, 8, 0 },
{ /* 428 */ 0x991F1A51, 0x64F044B4, 8, 0 }, { /* 429 */ 0x98C3BAC7, 0x6A2AF5E1, 8, 0 },
{ /* 430 */ 0x9868C80A, 0x00000000, 8, 0 }, { /* 431 */ 0x980E4156, 0x85C3D0A8, 8, 0 },
{ /* 432 */ 0x97B425ED, 0x92D7F3F9, 8, 0 }, { /* 433 */ 0x975A7510, 0x00000000, 8, 0 },
{ /* 434 */ 0x97012E02, 0x617B4216, 8, 0 }, { /* 435 */ 0x96A8500A, 0x00000000, 8, 0 },
{ /* 436 */ 0x964FDA6C, 0x918C25D4, 8, 0 }, { /* 437 */ 0x95F7CC73, 0x00000000, 8, 0 },
{ /* 438 */ 0x95A02568, 0x90E86DBA, 8, 0 }, { /* 439 */ 0x9548E498, 0x00000000, 8, 0 },
{ /* 440 */ 0x94F2094F, 0x82BBC5D7, 8, 0 }, { /* 441 */ 0x949B92DE, 0x00000000, 8, 0 },
{ /* 442 */ 0x94458094, 0x6CC215E5, 8, 0 }, { /* 443 */ 0x93EFD1C5, 0x8C53F151, 8, 0 },
{ /* 444 */ 0x939A85C4, 0x8F05C755, 8, 0 }, { /* 445 */ 0x93459BE7, 0x00000000, 8, 0 },
{ /* 446 */ 0x92F11384, 0x910A6A75, 8, 0 }, { /* 447 */ 0x929CEBF5, 0x00000000, 8, 0 },
{ /* 448 */ 0x92492492, 0x6938A22A, 8, 0 }, { /* 449 */ 0x91F5BCB9, 0x00000000, 8, 0 },
{ /* 450 */ 0x91A2B3C5, 0x00000000, 8, 0 }, { /* 451 */ 0x91500915, 0x91500915, 8, 0 },
{ /* 452 */ 0x90FDBC09, 0x88BBFE97, 8, 0 }, { /* 453 */ 0x90ABCC02, 0x6BB5AEA5, 8, 0 },
{ /* 454 */ 0x905A3863, 0x6E19535E, 8, 0 }, { /* 455 */ 0x90090090, 0x8BB0BBF2, 8, 0 },
{ /* 456 */ 0x8FB823EE, 0x8B652615, 8, 0 }, { /* 457 */ 0x8F67A1E4, 0x00000000, 8, 0 },
{ /* 458 */ 0x8F1779DA, 0x00000000, 8, 0 }, { /* 459 */ 0x8EC7AB3A, 0x00000000, 8, 0 },
{ /* 460 */ 0x8E78356D, 0x84083914, 8, 0 }, { /* 461 */ 0x8E2917E1, 0x00000000, 8, 0 },
{ /* 462 */ 0x8DDA5202, 0x6FDBA642, 8, 0 }, { /* 463 */ 0x8D8BE340, 0x00000000, 8, 0 },
{ /* 464 */ 0x8D3DCB09, 0x00000000, 8, 0 }, { /* 465 */ 0x8CF008CF, 0x8CF008CF, 8, 0 },
{ /* 466 */ 0x8CA29C04, 0x55CEFFF7, 8, 0 }, { /* 467 */ 0x8C55841D, 0x00000000, 8, 0 },
{ /* 468 */ 0x8C08C08C, 0x87F265C4, 8, 0 }, { /* 469 */ 0x8BBC50C9, 0x00000000, 8, 0 },
{ /* 470 */ 0x8B70344A, 0x81748207, 8, 0 }, { /* 471 */ 0x8B246A88, 0x00000000, 8, 0 },
{ /* 472 */ 0x8AD8F2FC, 0x00000000, 8, 0 }, { /* 473 */ 0x8A8DCD20, 0x00000000, 8, 0 },
{ /* 474 */ 0x8A42F870, 0x5C4846A5, 8, 0 }, { /* 475 */ 0x89F8746A, 0x00000000, 8, 0 },
{ /* 476 */ 0x89AE408A, 0x00000000, 8, 0 }, { /* 477 */ 0x89645C4F, 0x4F0837E6, 8, 0 },
{ /* 478 */ 0x891AC73B, 0x00000000, 8, 0 }, { /* 479 */ 0x88D180CD, 0x6A5E515C, 8, 0 },
{ /* 480 */ 0x88888889, 0x00000000, 8, 0 }, { /* 481 */ 0x883FDDF0, 0x8466056E, 8, 0 },
{ /* 482 */ 0x87F78088, 0x00000000, 8, 0 }, { /* 483 */ 0x87AF6FD6, 0x00000000, 8, 0 },
{ /* 484 */ 0x8767AB5F, 0x6C1B1295, 8, 0 }, { /* 485 */ 0x872032AC, 0x7DC57D99, 8, 0 },
{ /* 486 */ 0x86D90545, 0x00000000, 8, 0 }, { /* 487 */ 0x869222B2, 0x00000000, 8, 0 },
{ /* 488 */ 0x864B8A7E, 0x00000000, 8, 0 }, { /* 489 */ 0x86053C34, 0x578CE94B, 8, 0 },
{ /* 490 */ 0x85BF3761, 0x6EF1149F, 8, 0 }, { /* 491 */ 0x85797B91, 0x47E3D9B3, 8, 0 },
{ /* 492 */ 0x85340853, 0x644C372D, 8, 0 }, { /* 493 */ 0x84EEDD36, 0x00000000, 8, 0 },
{ /* 494 */ 0x84A9F9C8, 0x8107CD75, 8, 0 }, { /* 495 */ 0x84655D9C, 0x00000000, 8, 0 },
{ /* 496 */ 0x84210842, 0x7C43E5B3, 8, 0 }, { /* 497 */ 0x83DCF94E, 0x00000000, 8, 0 },
{ /* 498 */ 0x83993052, 0x637D2978, 8, 0 }, { /* 499 */ 0x8355ACE4, 0x00000000, 8, 0 },
{ /* 500 */ 0x83126E98, 0x00000000, 8, 0 }, { /* 501 */ 0x82CF7504, 0x00000000, 8, 0 },
{ /* 502 */ 0x828CBFBF, 0x00000000, 8, 0 }, { /* 503 */ 0x824A4E61, 0x00000000, 8, 0 },
{ /* 504 */ 0x82082082, 0x7E8DCD3B, 8, 0 }, { /* 505 */ 0x81C635BC, 0x792C0147, 8, 0 },
{ /* 506 */ 0x81848DA9, 0x00000000, 8, 0 }, { /* 507 */ 0x814327E4, 0x00000000, 8, 0 },
{ /* 508 */ 0x81020408, 0x7986C452, 8, 0 }, { /* 509 */ 0x80C121B3, 0x00000000, 8, 0 },
{ /* 510 */ 0x80808081, 0x00000000, 8, 0 }, { /* 511 */ 0x80402010, 0x7CE0462C, 8, 0 },
};
static const DivRatio32 div_ratio_tbl32_64[kMaxDivTable] = {
{ /* 0 */ 0x00000000, 0x00000000, 32, 0 }, { /* 1 */ 0xFFFFFFFF, 0xFFFFFFFF, 32, 0 },
{ /* 2 */ 0x80000000, 0x00000000, 32, 0 }, { /* 3 */ 0xAAAAAAAB, 0x00000000, 33, 0 },
{ /* 4 */ 0x40000000, 0x00000000, 32, 0 }, { /* 5 */ 0xCCCCCCCD, 0x00000000, 34, 0 },
{ /* 6 */ 0xAAAAAAAB, 0x00000000, 34, 0 }, { /* 7 */ 0x92492492, 0x92492492, 34, 0 },
{ /* 8 */ 0x20000000, 0x00000000, 32, 0 }, { /* 9 */ 0xE38E38E4, 0x00000000, 35, 0 },
{ /* 10 */ 0xCCCCCCCD, 0x00000000, 35, 0 }, { /* 11 */ 0xBA2E8BA3, 0x00000000, 35, 0 },
{ /* 12 */ 0xAAAAAAAB, 0x00000000, 35, 0 }, { /* 13 */ 0x9D89D89E, 0x00000000, 35, 0 },
{ /* 14 */ 0x92492492, 0x92492492, 35, 0 }, { /* 15 */ 0x88888889, 0x00000000, 35, 0 },
{ /* 16 */ 0x10000000, 0x00000000, 32, 0 }, { /* 17 */ 0xF0F0F0F1, 0x00000000, 36, 0 },
{ /* 18 */ 0xE38E38E4, 0x00000000, 36, 0 }, { /* 19 */ 0xD79435E5, 0xD79435E5, 36, 0 },
{ /* 20 */ 0xCCCCCCCD, 0x00000000, 36, 0 }, { /* 21 */ 0xC30C30C3, 0xC30C30C3, 36, 0 },
{ /* 22 */ 0xBA2E8BA3, 0x00000000, 36, 0 }, { /* 23 */ 0xB21642C9, 0x00000000, 36, 0 },
{ /* 24 */ 0xAAAAAAAB, 0x00000000, 36, 0 }, { /* 25 */ 0xA3D70A3E, 0x00000000, 36, 0 },
{ /* 26 */ 0x9D89D89E, 0x00000000, 36, 0 }, { /* 27 */ 0x97B425ED, 0x97B425ED, 36, 0 },
{ /* 28 */ 0x92492492, 0x92492492, 36, 0 }, { /* 29 */ 0x8D3DCB09, 0x00000000, 36, 0 },
{ /* 30 */ 0x88888889, 0x00000000, 36, 0 }, { /* 31 */ 0x84210842, 0x84210842, 36, 0 },
{ /* 32 */ 0x08000000, 0x00000000, 32, 0 }, { /* 33 */ 0xF83E0F84, 0x00000000, 37, 0 },
{ /* 34 */ 0xF0F0F0F1, 0x00000000, 37, 0 }, { /* 35 */ 0xEA0EA0EA, 0xEA0EA0EA, 37, 0 },
{ /* 36 */ 0xE38E38E4, 0x00000000, 37, 0 }, { /* 37 */ 0xDD67C8A6, 0xDD67C8A6, 37, 0 },
{ /* 38 */ 0xD79435E5, 0xD79435E5, 37, 0 }, { /* 39 */ 0xD20D20D2, 0xD20D20D2, 37, 0 },
{ /* 40 */ 0xCCCCCCCD, 0x00000000, 37, 0 }, { /* 41 */ 0xC7CE0C7D, 0x00000000, 37, 0 },
{ /* 42 */ 0xC30C30C3, 0xC30C30C3, 37, 0 }, { /* 43 */ 0xBE82FA0C, 0x00000000, 37, 0 },
{ /* 44 */ 0xBA2E8BA3, 0x00000000, 37, 0 }, { /* 45 */ 0xB60B60B6, 0xB60B60B6, 37, 0 },
{ /* 46 */ 0xB21642C9, 0x00000000, 37, 0 }, { /* 47 */ 0xAE4C415D, 0x00000000, 37, 0 },
{ /* 48 */ 0xAAAAAAAB, 0x00000000, 37, 0 }, { /* 49 */ 0xA72F053A, 0x00000000, 37, 0 },
{ /* 50 */ 0xA3D70A3E, 0x00000000, 37, 0 }, { /* 51 */ 0xA0A0A0A1, 0x00000000, 37, 0 },
{ /* 52 */ 0x9D89D89E, 0x00000000, 37, 0 }, { /* 53 */ 0x9A90E7D9, 0x9A90E7D9, 37, 0 },
{ /* 54 */ 0x97B425ED, 0x97B425ED, 37, 0 }, { /* 55 */ 0x94F2094F, 0x94F2094F, 37, 0 },
{ /* 56 */ 0x92492492, 0x92492492, 37, 0 }, { /* 57 */ 0x8FB823EE, 0x8FB823EE, 37, 0 },
{ /* 58 */ 0x8D3DCB09, 0x00000000, 37, 0 }, { /* 59 */ 0x8AD8F2FC, 0x00000000, 37, 0 },
{ /* 60 */ 0x88888889, 0x00000000, 37, 0 }, { /* 61 */ 0x864B8A7E, 0x00000000, 37, 0 },
{ /* 62 */ 0x84210842, 0x84210842, 37, 0 }, { /* 63 */ 0x82082082, 0x82082082, 37, 0 },
{ /* 64 */ 0x04000000, 0x00000000, 32, 0 }, { /* 65 */ 0xFC0FC0FD, 0x00000000, 38, 0 },
{ /* 66 */ 0xF83E0F84, 0x00000000, 38, 0 }, { /* 67 */ 0xF4898D60, 0x00000000, 38, 0 },
{ /* 68 */ 0xF0F0F0F1, 0x00000000, 38, 0 }, { /* 69 */ 0xED7303B6, 0x00000000, 38, 0 },
{ /* 70 */ 0xEA0EA0EA, 0xEA0EA0EA, 38, 0 }, { /* 71 */ 0xE6C2B449, 0x00000000, 38, 0 },
{ /* 72 */ 0xE38E38E4, 0x00000000, 38, 0 }, { /* 73 */ 0xE070381C, 0xE070381C, 38, 0 },
{ /* 74 */ 0xDD67C8A6, 0xDD67C8A6, 38, 0 }, { /* 75 */ 0xDA740DA8, 0x00000000, 38, 0 },
{ /* 76 */ 0xD79435E5, 0xD79435E5, 38, 0 }, { /* 77 */ 0xD4C77B04, 0x00000000, 38, 0 },
{ /* 78 */ 0xD20D20D2, 0xD20D20D2, 38, 0 }, { /* 79 */ 0xCF6474A9, 0x00000000, 38, 0 },
{ /* 80 */ 0xCCCCCCCD, 0x00000000, 38, 0 }, { /* 81 */ 0xCA4587E7, 0x00000000, 38, 0 },
{ /* 82 */ 0xC7CE0C7D, 0x00000000, 38, 0 }, { /* 83 */ 0xC565C87C, 0x00000000, 38, 0 },
{ /* 84 */ 0xC30C30C3, 0xC30C30C3, 38, 0 }, { /* 85 */ 0xC0C0C0C1, 0x00000000, 38, 0 },
{ /* 86 */ 0xBE82FA0C, 0x00000000, 38, 0 }, { /* 87 */ 0xBC52640C, 0x00000000, 38, 0 },
{ /* 88 */ 0xBA2E8BA3, 0x00000000, 38, 0 }, { /* 89 */ 0xB81702E1, 0x00000000, 38, 0 },
{ /* 90 */ 0xB60B60B6, 0xB60B60B6, 38, 0 }, { /* 91 */ 0xB40B40B4, 0xB40B40B4, 38, 0 },
{ /* 92 */ 0xB21642C9, 0x00000000, 38, 0 }, { /* 93 */ 0xB02C0B03, 0x00000000, 38, 0 },
{ /* 94 */ 0xAE4C415D, 0x00000000, 38, 0 }, { /* 95 */ 0xAC769184, 0xAC769184, 38, 0 },
{ /* 96 */ 0xAAAAAAAB, 0x00000000, 38, 0 }, { /* 97 */ 0xA8E83F57, 0xA8E83F57, 38, 0 },
{ /* 98 */ 0xA72F053A, 0x00000000, 38, 0 }, { /* 99 */ 0xA57EB503, 0x00000000, 38, 0 },
{ /* 100 */ 0xA3D70A3E, 0x00000000, 38, 0 }, { /* 101 */ 0xA237C32B, 0xA237C32B, 38, 0 },
{ /* 102 */ 0xA0A0A0A1, 0x00000000, 38, 0 }, { /* 103 */ 0x9F1165E7, 0x9F1165E7, 38, 0 },
{ /* 104 */ 0x9D89D89E, 0x00000000, 38, 0 }, { /* 105 */ 0x9C09C09C, 0x9C09C09C, 38, 0 },
{ /* 106 */ 0x9A90E7D9, 0x9A90E7D9, 38, 0 }, { /* 107 */ 0x991F1A51, 0x991F1A51, 38, 0 },
{ /* 108 */ 0x97B425ED, 0x97B425ED, 38, 0 }, { /* 109 */ 0x964FDA6C, 0x964FDA6C, 38, 0 },
{ /* 110 */ 0x94F2094F, 0x94F2094F, 38, 0 }, { /* 111 */ 0x939A85C4, 0x939A85C4, 38, 0 },
{ /* 112 */ 0x92492492, 0x92492492, 38, 0 }, { /* 113 */ 0x90FDBC09, 0x90FDBC09, 38, 0 },
{ /* 114 */ 0x8FB823EE, 0x8FB823EE, 38, 0 }, { /* 115 */ 0x8E78356D, 0x8E78356D, 38, 0 },
{ /* 116 */ 0x8D3DCB09, 0x00000000, 38, 0 }, { /* 117 */ 0x8C08C08C, 0x8C08C08C, 38, 0 },
{ /* 118 */ 0x8AD8F2FC, 0x00000000, 38, 0 }, { /* 119 */ 0x89AE408A, 0x00000000, 38, 0 },
{ /* 120 */ 0x88888889, 0x00000000, 38, 0 }, { /* 121 */ 0x8767AB5F, 0x8767AB5F, 38, 0 },
{ /* 122 */ 0x864B8A7E, 0x00000000, 38, 0 }, { /* 123 */ 0x85340853, 0x85340853, 38, 0 },
{ /* 124 */ 0x84210842, 0x84210842, 38, 0 }, { /* 125 */ 0x83126E98, 0x00000000, 38, 0 },
{ /* 126 */ 0x82082082, 0x82082082, 38, 0 }, { /* 127 */ 0x81020408, 0x81020408, 38, 0 },
{ /* 128 */ 0x02000000, 0x00000000, 32, 0 }, { /* 129 */ 0xFE03F810, 0x00000000, 39, 0 },
{ /* 130 */ 0xFC0FC0FD, 0x00000000, 39, 0 }, { /* 131 */ 0xFA232CF3, 0x00000000, 39, 0 },
{ /* 132 */ 0xF83E0F84, 0x00000000, 39, 0 }, { /* 133 */ 0xF6603D99, 0x00000000, 39, 0 },
{ /* 134 */ 0xF4898D60, 0x00000000, 39, 0 }, { /* 135 */ 0xF2B9D649, 0x00000000, 39, 0 },
{ /* 136 */ 0xF0F0F0F1, 0x00000000, 39, 0 }, { /* 137 */ 0xEF2EB720, 0x00000000, 39, 0 },
{ /* 138 */ 0xED7303B6, 0x00000000, 39, 0 }, { /* 139 */ 0xEBBDB2A6, 0x00000000, 39, 0 },
{ /* 140 */ 0xEA0EA0EA, 0xEA0EA0EA, 39, 0 }, { /* 141 */ 0xE865AC7C, 0x00000000, 39, 0 },
{ /* 142 */ 0xE6C2B449, 0x00000000, 39, 0 }, { /* 143 */ 0xE525982B, 0x00000000, 39, 0 },
{ /* 144 */ 0xE38E38E4, 0x00000000, 39, 0 }, { /* 145 */ 0xE1FC780F, 0x00000000, 39, 0 },
{ /* 146 */ 0xE070381C, 0xE070381C, 39, 0 }, { /* 147 */ 0xDEE95C4D, 0x00000000, 39, 0 },
{ /* 148 */ 0xDD67C8A6, 0xDD67C8A6, 39, 0 }, { /* 149 */ 0xDBEB61EF, 0x00000000, 39, 0 },
{ /* 150 */ 0xDA740DA8, 0x00000000, 39, 0 }, { /* 151 */ 0xD901B204, 0x00000000, 39, 0 },
{ /* 152 */ 0xD79435E5, 0xD79435E5, 39, 0 }, { /* 153 */ 0xD62B80D7, 0x00000000, 39, 0 },
{ /* 154 */ 0xD4C77B04, 0x00000000, 39, 0 }, { /* 155 */ 0xD3680D37, 0x00000000, 39, 0 },
{ /* 156 */ 0xD20D20D2, 0xD20D20D2, 39, 0 }, { /* 157 */ 0xD0B69FCC, 0x00000000, 39, 0 },
{ /* 158 */ 0xCF6474A9, 0x00000000, 39, 0 }, { /* 159 */ 0xCE168A77, 0xCE168A77, 39, 0 },
{ /* 160 */ 0xCCCCCCCD, 0x00000000, 39, 0 }, { /* 161 */ 0xCB8727C1, 0x00000000, 39, 0 },
{ /* 162 */ 0xCA4587E7, 0x00000000, 39, 0 }, { /* 163 */ 0xC907DA4F, 0x00000000, 39, 0 },
{ /* 164 */ 0xC7CE0C7D, 0x00000000, 39, 0 }, { /* 165 */ 0xC6980C6A, 0x00000000, 39, 0 },
{ /* 166 */ 0xC565C87C, 0x00000000, 39, 0 }, { /* 167 */ 0xC4372F86, 0x00000000, 39, 0 },
{ /* 168 */ 0xC30C30C3, 0xC30C30C3, 39, 0 }, { /* 169 */ 0xC1E4BBD6, 0x00000000, 39, 0 },
{ /* 170 */ 0xC0C0C0C1, 0x00000000, 39, 0 }, { /* 171 */ 0xBFA02FE8, 0xBFA02FE8, 39, 0 },
{ /* 172 */ 0xBE82FA0C, 0x00000000, 39, 0 }, { /* 173 */ 0xBD691047, 0xBD691047, 39, 0 },
{ /* 174 */ 0xBC52640C, 0x00000000, 39, 0 }, { /* 175 */ 0xBB3EE722, 0x00000000, 39, 0 },
{ /* 176 */ 0xBA2E8BA3, 0x00000000, 39, 0 }, { /* 177 */ 0xB92143FA, 0xB92143FA, 39, 0 },
{ /* 178 */ 0xB81702E1, 0x00000000, 39, 0 }, { /* 179 */ 0xB70FBB5A, 0xB70FBB5A, 39, 0 },
{ /* 180 */ 0xB60B60B6, 0xB60B60B6, 39, 0 }, { /* 181 */ 0xB509E68B, 0x00000000, 39, 0 },
{ /* 182 */ 0xB40B40B4, 0xB40B40B4, 39, 0 }, { /* 183 */ 0xB30F6353, 0x00000000, 39, 0 },
{ /* 184 */ 0xB21642C9, 0x00000000, 39, 0 }, { /* 185 */ 0xB11FD3B8, 0xB11FD3B8, 39, 0 },
{ /* 186 */ 0xB02C0B03, 0x00000000, 39, 0 }, { /* 187 */ 0xAF3ADDC7, 0x00000000, 39, 0 },
{ /* 188 */ 0xAE4C415D, 0x00000000, 39, 0 }, { /* 189 */ 0xAD602B58, 0xAD602B58, 39, 0 },
{ /* 190 */ 0xAC769184, 0xAC769184, 39, 0 }, { /* 191 */ 0xAB8F69E3, 0x00000000, 39, 0 },
{ /* 192 */ 0xAAAAAAAB, 0x00000000, 39, 0 }, { /* 193 */ 0xA9C84A48, 0x00000000, 39, 0 },
{ /* 194 */ 0xA8E83F57, 0xA8E83F57, 39, 0 }, { /* 195 */ 0xA80A80A8, 0xA80A80A8, 39, 0 },
{ /* 196 */ 0xA72F053A, 0x00000000, 39, 0 }, { /* 197 */ 0xA655C439, 0xA655C439, 39, 0 },
{ /* 198 */ 0xA57EB503, 0x00000000, 39, 0 }, { /* 199 */ 0xA4A9CF1E, 0x00000000, 39, 0 },
{ /* 200 */ 0xA3D70A3E, 0x00000000, 39, 0 }, { /* 201 */ 0xA3065E40, 0x00000000, 39, 0 },
{ /* 202 */ 0xA237C32B, 0xA237C32B, 39, 0 }, { /* 203 */ 0xA16B312F, 0x00000000, 39, 0 },
{ /* 204 */ 0xA0A0A0A1, 0x00000000, 39, 0 }, { /* 205 */ 0x9FD809FE, 0x00000000, 39, 0 },
{ /* 206 */ 0x9F1165E7, 0x9F1165E7, 39, 0 }, { /* 207 */ 0x9E4CAD24, 0x00000000, 39, 0 },
{ /* 208 */ 0x9D89D89E, 0x00000000, 39, 0 }, { /* 209 */ 0x9CC8E161, 0x00000000, 39, 0 },
{ /* 210 */ 0x9C09C09C, 0x9C09C09C, 39, 0 }, { /* 211 */ 0x9B4C6F9F, 0x00000000, 39, 0 },
{ /* 212 */ 0x9A90E7D9, 0x9A90E7D9, 39, 0 }, { /* 213 */ 0x99D722DB, 0x00000000, 39, 0 },
{ /* 214 */ 0x991F1A51, 0x991F1A51, 39, 0 }, { /* 215 */ 0x9868C80A, 0x00000000, 39, 0 },
{ /* 216 */ 0x97B425ED, 0x97B425ED, 39, 0 }, { /* 217 */ 0x97012E02, 0x97012E02, 39, 0 },
{ /* 218 */ 0x964FDA6C, 0x964FDA6C, 39, 0 }, { /* 219 */ 0x95A02568, 0x95A02568, 39, 0 },
{ /* 220 */ 0x94F2094F, 0x94F2094F, 39, 0 }, { /* 221 */ 0x94458094, 0x94458094, 39, 0 },
{ /* 222 */ 0x939A85C4, 0x939A85C4, 39, 0 }, { /* 223 */ 0x92F11384, 0x92F11384, 39, 0 },
{ /* 224 */ 0x92492492, 0x92492492, 39, 0 }, { /* 225 */ 0x91A2B3C5, 0x00000000, 39, 0 },
{ /* 226 */ 0x90FDBC09, 0x90FDBC09, 39, 0 }, { /* 227 */ 0x905A3863, 0x905A3863, 39, 0 },
{ /* 228 */ 0x8FB823EE, 0x8FB823EE, 39, 0 }, { /* 229 */ 0x8F1779DA, 0x00000000, 39, 0 },
{ /* 230 */ 0x8E78356D, 0x8E78356D, 39, 0 }, { /* 231 */ 0x8DDA5202, 0x8DDA5202, 39, 0 },
{ /* 232 */ 0x8D3DCB09, 0x00000000, 39, 0 }, { /* 233 */ 0x8CA29C04, 0x8CA29C04, 39, 0 },
{ /* 234 */ 0x8C08C08C, 0x8C08C08C, 39, 0 }, { /* 235 */ 0x8B70344A, 0x8B70344A, 39, 0 },
{ /* 236 */ 0x8AD8F2FC, 0x00000000, 39, 0 }, { /* 237 */ 0x8A42F870, 0x8A42F870, 39, 0 },
{ /* 238 */ 0x89AE408A, 0x00000000, 39, 0 }, { /* 239 */ 0x891AC73B, 0x00000000, 39, 0 },
{ /* 240 */ 0x88888889, 0x00000000, 39, 0 }, { /* 241 */ 0x87F78088, 0x00000000, 39, 0 },
{ /* 242 */ 0x8767AB5F, 0x8767AB5F, 39, 0 }, { /* 243 */ 0x86D90545, 0x00000000, 39, 0 },
{ /* 244 */ 0x864B8A7E, 0x00000000, 39, 0 }, { /* 245 */ 0x85BF3761, 0x85BF3761, 39, 0 },
{ /* 246 */ 0x85340853, 0x85340853, 39, 0 }, { /* 247 */ 0x84A9F9C8, 0x84A9F9C8, 39, 0 },
{ /* 248 */ 0x84210842, 0x84210842, 39, 0 }, { /* 249 */ 0x83993052, 0x83993052, 39, 0 },
{ /* 250 */ 0x83126E98, 0x00000000, 39, 0 }, { /* 251 */ 0x828CBFBF, 0x00000000, 39, 0 },
{ /* 252 */ 0x82082082, 0x82082082, 39, 0 }, { /* 253 */ 0x81848DA9, 0x00000000, 39, 0 },
{ /* 254 */ 0x81020408, 0x81020408, 39, 0 }, { /* 255 */ 0x80808081, 0x00000000, 39, 0 },
{ /* 256 */ 0x01000000, 0x00000000, 32, 0 }, { /* 257 */ 0xFF00FF01, 0x00000000, 40, 0 },
{ /* 258 */ 0xFE03F810, 0x00000000, 40, 0 }, { /* 259 */ 0xFD08E551, 0x00000000, 40, 0 },
{ /* 260 */ 0xFC0FC0FD, 0x00000000, 40, 0 }, { /* 261 */ 0xFB188566, 0x00000000, 40, 0 },
{ /* 262 */ 0xFA232CF3, 0x00000000, 40, 0 }, { /* 263 */ 0xF92FB222, 0x00000000, 40, 0 },
{ /* 264 */ 0xF83E0F84, 0x00000000, 40, 0 }, { /* 265 */ 0xF74E3FC3, 0x00000000, 40, 0 },
{ /* 266 */ 0xF6603D99, 0x00000000, 40, 0 }, { /* 267 */ 0xF57403D6, 0x00000000, 40, 0 },
{ /* 268 */ 0xF4898D60, 0x00000000, 40, 0 }, { /* 269 */ 0xF3A0D52D, 0x00000000, 40, 0 },
{ /* 270 */ 0xF2B9D649, 0x00000000, 40, 0 }, { /* 271 */ 0xF1D48BCF, 0x00000000, 40, 0 },
{ /* 272 */ 0xF0F0F0F1, 0x00000000, 40, 0 }, { /* 273 */ 0xF00F00F0, 0xF00F00F0, 40, 0 },
{ /* 274 */ 0xEF2EB720, 0x00000000, 40, 0 }, { /* 275 */ 0xEE500EE5, 0xEE500EE5, 40, 0 },
{ /* 276 */ 0xED7303B6, 0x00000000, 40, 0 }, { /* 277 */ 0xEC979119, 0x00000000, 40, 0 },
{ /* 278 */ 0xEBBDB2A6, 0x00000000, 40, 0 }, { /* 279 */ 0xEAE56404, 0x00000000, 40, 0 },
{ /* 280 */ 0xEA0EA0EA, 0xEA0EA0EA, 40, 0 }, { /* 281 */ 0xE9396520, 0x00000000, 40, 0 },
{ /* 282 */ 0xE865AC7C, 0x00000000, 40, 0 }, { /* 283 */ 0xE79372E3, 0x00000000, 40, 0 },
{ /* 284 */ 0xE6C2B449, 0x00000000, 40, 0 }, { /* 285 */ 0xE5F36CB0, 0xE5F36CB0, 40, 0 },
{ /* 286 */ 0xE525982B, 0x00000000, 40, 0 }, { /* 287 */ 0xE45932D8, 0x00000000, 40, 0 },
{ /* 288 */ 0xE38E38E4, 0x00000000, 40, 0 }, { /* 289 */ 0xE2C4A689, 0x00000000, 40, 0 },
{ /* 290 */ 0xE1FC780F, 0x00000000, 40, 0 }, { /* 291 */ 0xE135A9CA, 0x00000000, 40, 0 },
{ /* 292 */ 0xE070381C, 0xE070381C, 40, 0 }, { /* 293 */ 0xDFAC1F75, 0x00000000, 40, 0 },
{ /* 294 */ 0xDEE95C4D, 0x00000000, 40, 0 }, { /* 295 */ 0xDE27EB2D, 0x00000000, 40, 0 },
{ /* 296 */ 0xDD67C8A6, 0xDD67C8A6, 40, 0 }, { /* 297 */ 0xDCA8F159, 0x00000000, 40, 0 },
{ /* 298 */ 0xDBEB61EF, 0x00000000, 40, 0 }, { /* 299 */ 0xDB2F171E, 0x00000000, 40, 0 },
{ /* 300 */ 0xDA740DA8, 0x00000000, 40, 0 }, { /* 301 */ 0xD9BA4257, 0x00000000, 40, 0 },
{ /* 302 */ 0xD901B204, 0x00000000, 40, 0 }, { /* 303 */ 0xD84A598F, 0x00000000, 40, 0 },
{ /* 304 */ 0xD79435E5, 0xD79435E5, 40, 0 }, { /* 305 */ 0xD6DF43FD, 0x00000000, 40, 0 },
{ /* 306 */ 0xD62B80D7, 0x00000000, 40, 0 }, { /* 307 */ 0xD578E97D, 0x00000000, 40, 0 },
{ /* 308 */ 0xD4C77B04, 0x00000000, 40, 0 }, { /* 309 */ 0xD417328A, 0x00000000, 40, 0 },
{ /* 310 */ 0xD3680D37, 0x00000000, 40, 0 }, { /* 311 */ 0xD2BA083C, 0x00000000, 40, 0 },
{ /* 312 */ 0xD20D20D2, 0xD20D20D2, 40, 0 }, { /* 313 */ 0xD161543E, 0xD161543E, 40, 0 },
{ /* 314 */ 0xD0B69FCC, 0x00000000, 40, 0 }, { /* 315 */ 0xD00D00D0, 0xD00D00D0, 40, 0 },
{ /* 316 */ 0xCF6474A9, 0x00000000, 40, 0 }, { /* 317 */ 0xCEBCF8BC, 0x00000000, 40, 0 },
{ /* 318 */ 0xCE168A77, 0xCE168A77, 40, 0 }, { /* 319 */ 0xCD712753, 0x00000000, 40, 0 },
{ /* 320 */ 0xCCCCCCCD, 0x00000000, 40, 0 }, { /* 321 */ 0xCC29786D, 0x00000000, 40, 0 },
{ /* 322 */ 0xCB8727C1, 0x00000000, 40, 0 }, { /* 323 */ 0xCAE5D85F, 0xCAE5D85F, 40, 0 },
{ /* 324 */ 0xCA4587E7, 0x00000000, 40, 0 }, { /* 325 */ 0xC9A633FD, 0x00000000, 40, 0 },
{ /* 326 */ 0xC907DA4F, 0x00000000, 40, 0 }, { /* 327 */ 0xC86A7890, 0xC86A7890, 40, 0 },
{ /* 328 */ 0xC7CE0C7D, 0x00000000, 40, 0 }, { /* 329 */ 0xC73293D8, 0x00000000, 40, 0 },
{ /* 330 */ 0xC6980C6A, 0x00000000, 40, 0 }, { /* 331 */ 0xC5FE7403, 0xC5FE7403, 40, 0 },
{ /* 332 */ 0xC565C87C, 0x00000000, 40, 0 }, { /* 333 */ 0xC4CE07B0, 0xC4CE07B0, 40, 0 },
{ /* 334 */ 0xC4372F86, 0x00000000, 40, 0 }, { /* 335 */ 0xC3A13DE6, 0xC3A13DE6, 40, 0 },
{ /* 336 */ 0xC30C30C3, 0xC30C30C3, 40, 0 }, { /* 337 */ 0xC2780614, 0x00000000, 40, 0 },
{ /* 338 */ 0xC1E4BBD6, 0x00000000, 40, 0 }, { /* 339 */ 0xC152500C, 0xC152500C, 40, 0 },
{ /* 340 */ 0xC0C0C0C1, 0x00000000, 40, 0 }, { /* 341 */ 0xC0300C03, 0xC0300C03, 40, 0 },
{ /* 342 */ 0xBFA02FE8, 0xBFA02FE8, 40, 0 }, { /* 343 */ 0xBF112A8B, 0x00000000, 40, 0 },
{ /* 344 */ 0xBE82FA0C, 0x00000000, 40, 0 }, { /* 345 */ 0xBDF59C92, 0x00000000, 40, 0 },
{ /* 346 */ 0xBD691047, 0xBD691047, 40, 0 }, { /* 347 */ 0xBCDD535E, 0x00000000, 40, 0 },
{ /* 348 */ 0xBC52640C, 0x00000000, 40, 0 }, { /* 349 */ 0xBBC8408D, 0x00000000, 40, 0 },
{ /* 350 */ 0xBB3EE722, 0x00000000, 40, 0 }, { /* 351 */ 0xBAB65610, 0xBAB65610, 40, 0 },
{ /* 352 */ 0xBA2E8BA3, 0x00000000, 40, 0 }, { /* 353 */ 0xB9A7862A, 0xB9A7862A, 40, 0 },
{ /* 354 */ 0xB92143FA, 0xB92143FA, 40, 0 }, { /* 355 */ 0xB89BC36D, 0x00000000, 40, 0 },
{ /* 356 */ 0xB81702E1, 0x00000000, 40, 0 }, { /* 357 */ 0xB79300B8, 0x00000000, 40, 0 },
{ /* 358 */ 0xB70FBB5A, 0xB70FBB5A, 40, 0 }, { /* 359 */ 0xB68D3134, 0xB68D3134, 40, 0 },
{ /* 360 */ 0xB60B60B6, 0xB60B60B6, 40, 0 }, { /* 361 */ 0xB58A4855, 0xB58A4855, 40, 0 },
{ /* 362 */ 0xB509E68B, 0x00000000, 40, 0 }, { /* 363 */ 0xB48A39D4, 0xB48A39D4, 40, 0 },
{ /* 364 */ 0xB40B40B4, 0xB40B40B4, 40, 0 }, { /* 365 */ 0xB38CF9B0, 0xB38CF9B0, 40, 0 },
{ /* 366 */ 0xB30F6353, 0x00000000, 40, 0 }, { /* 367 */ 0xB2927C2A, 0x00000000, 40, 0 },
{ /* 368 */ 0xB21642C9, 0x00000000, 40, 0 }, { /* 369 */ 0xB19AB5C5, 0x00000000, 40, 0 },
{ /* 370 */ 0xB11FD3B8, 0xB11FD3B8, 40, 0 }, { /* 371 */ 0xB0A59B42, 0x00000000, 40, 0 },
{ /* 372 */ 0xB02C0B03, 0x00000000, 40, 0 }, { /* 373 */ 0xAFB321A1, 0xAFB321A1, 40, 0 },
{ /* 374 */ 0xAF3ADDC7, 0x00000000, 40, 0 }, { /* 375 */ 0xAEC33E20, 0x00000000, 40, 0 },
{ /* 376 */ 0xAE4C415D, 0x00000000, 40, 0 }, { /* 377 */ 0xADD5E632, 0xADD5E632, 40, 0 },
{ /* 378 */ 0xAD602B58, 0xAD602B58, 40, 0 }, { /* 379 */ 0xACEB0F89, 0xACEB0F89, 40, 0 },
{ /* 380 */ 0xAC769184, 0xAC769184, 40, 0 }, { /* 381 */ 0xAC02B00B, 0x00000000, 40, 0 },
{ /* 382 */ 0xAB8F69E3, 0x00000000, 40, 0 }, { /* 383 */ 0xAB1CBDD4, 0x00000000, 40, 0 },
{ /* 384 */ 0xAAAAAAAB, 0x00000000, 40, 0 }, { /* 385 */ 0xAA392F36, 0x00000000, 40, 0 },
{ /* 386 */ 0xA9C84A48, 0x00000000, 40, 0 }, { /* 387 */ 0xA957FAB5, 0xA957FAB5, 40, 0 },
{ /* 388 */ 0xA8E83F57, 0xA8E83F57, 40, 0 }, { /* 389 */ 0xA8791709, 0x00000000, 40, 0 },
{ /* 390 */ 0xA80A80A8, 0xA80A80A8, 40, 0 }, { /* 391 */ 0xA79C7B17, 0x00000000, 40, 0 },
{ /* 392 */ 0xA72F053A, 0x00000000, 40, 0 }, { /* 393 */ 0xA6C21DF7, 0x00000000, 40, 0 },
{ /* 394 */ 0xA655C439, 0xA655C439, 40, 0 }, { /* 395 */ 0xA5E9F6ED, 0xA5E9F6ED, 40, 0 },
{ /* 396 */ 0xA57EB503, 0x00000000, 40, 0 }, { /* 397 */ 0xA513FD6C, 0x00000000, 40, 0 },
{ /* 398 */ 0xA4A9CF1E, 0x00000000, 40, 0 }, { /* 399 */ 0xA4402910, 0xA4402910, 40, 0 },
{ /* 400 */ 0xA3D70A3E, 0x00000000, 40, 0 }, { /* 401 */ 0xA36E71A3, 0x00000000, 40, 0 },
{ /* 402 */ 0xA3065E40, 0x00000000, 40, 0 }, { /* 403 */ 0xA29ECF16, 0xA29ECF16, 40, 0 },
{ /* 404 */ 0xA237C32B, 0xA237C32B, 40, 0 }, { /* 405 */ 0xA1D13986, 0x00000000, 40, 0 },
{ /* 406 */ 0xA16B312F, 0x00000000, 40, 0 }, { /* 407 */ 0xA105A933, 0x00000000, 40, 0 },
{ /* 408 */ 0xA0A0A0A1, 0x00000000, 40, 0 }, { /* 409 */ 0xA03C1689, 0x00000000, 40, 0 },
{ /* 410 */ 0x9FD809FE, 0x00000000, 40, 0 }, { /* 411 */ 0x9F747A15, 0x9F747A15, 40, 0 },
{ /* 412 */ 0x9F1165E7, 0x9F1165E7, 40, 0 }, { /* 413 */ 0x9EAECC8D, 0x9EAECC8D, 40, 0 },
{ /* 414 */ 0x9E4CAD24, 0x00000000, 40, 0 }, { /* 415 */ 0x9DEB06C9, 0x9DEB06C9, 40, 0 },
{ /* 416 */ 0x9D89D89E, 0x00000000, 40, 0 }, { /* 417 */ 0x9D2921C4, 0x00000000, 40, 0 },
{ /* 418 */ 0x9CC8E161, 0x00000000, 40, 0 }, { /* 419 */ 0x9C69169B, 0x9C69169B, 40, 0 },
{ /* 420 */ 0x9C09C09C, 0x9C09C09C, 40, 0 }, { /* 421 */ 0x9BAADE8E, 0x9BAADE8E, 40, 0 },
{ /* 422 */ 0x9B4C6F9F, 0x00000000, 40, 0 }, { /* 423 */ 0x9AEE72FD, 0x00000000, 40, 0 },
{ /* 424 */ 0x9A90E7D9, 0x9A90E7D9, 40, 0 }, { /* 425 */ 0x9A33CD67, 0x9A33CD67, 40, 0 },
{ /* 426 */ 0x99D722DB, 0x00000000, 40, 0 }, { /* 427 */ 0x997AE76B, 0x997AE76B, 40, 0 },
{ /* 428 */ 0x991F1A51, 0x991F1A51, 40, 0 }, { /* 429 */ 0x98C3BAC7, 0x98C3BAC7, 40, 0 },
{ /* 430 */ 0x9868C80A, 0x00000000, 40, 0 }, { /* 431 */ 0x980E4156, 0x980E4156, 40, 0 },
{ /* 432 */ 0x97B425ED, 0x97B425ED, 40, 0 }, { /* 433 */ 0x975A7510, 0x00000000, 40, 0 },
{ /* 434 */ 0x97012E02, 0x97012E02, 40, 0 }, { /* 435 */ 0x96A8500A, 0x00000000, 40, 0 },
{ /* 436 */ 0x964FDA6C, 0x964FDA6C, 40, 0 }, { /* 437 */ 0x95F7CC73, 0x00000000, 40, 0 },
{ /* 438 */ 0x95A02568, 0x95A02568, 40, 0 }, { /* 439 */ 0x9548E498, 0x00000000, 40, 0 },
{ /* 440 */ 0x94F2094F, 0x94F2094F, 40, 0 }, { /* 441 */ 0x949B92DE, 0x00000000, 40, 0 },
{ /* 442 */ 0x94458094, 0x94458094, 40, 0 }, { /* 443 */ 0x93EFD1C5, 0x93EFD1C5, 40, 0 },
{ /* 444 */ 0x939A85C4, 0x939A85C4, 40, 0 }, { /* 445 */ 0x93459BE7, 0x00000000, 40, 0 },
{ /* 446 */ 0x92F11384, 0x92F11384, 40, 0 }, { /* 447 */ 0x929CEBF5, 0x00000000, 40, 0 },
{ /* 448 */ 0x92492492, 0x92492492, 40, 0 }, { /* 449 */ 0x91F5BCB9, 0x00000000, 40, 0 },
{ /* 450 */ 0x91A2B3C5, 0x00000000, 40, 0 }, { /* 451 */ 0x91500915, 0x91500915, 40, 0 },
{ /* 452 */ 0x90FDBC09, 0x90FDBC09, 40, 0 }, { /* 453 */ 0x90ABCC02, 0x90ABCC02, 40, 0 },
{ /* 454 */ 0x905A3863, 0x905A3863, 40, 0 }, { /* 455 */ 0x90090090, 0x90090090, 40, 0 },
{ /* 456 */ 0x8FB823EE, 0x8FB823EE, 40, 0 }, { /* 457 */ 0x8F67A1E4, 0x00000000, 40, 0 },
{ /* 458 */ 0x8F1779DA, 0x00000000, 40, 0 }, { /* 459 */ 0x8EC7AB3A, 0x00000000, 40, 0 },
{ /* 460 */ 0x8E78356D, 0x8E78356D, 40, 0 }, { /* 461 */ 0x8E2917E1, 0x00000000, 40, 0 },
{ /* 462 */ 0x8DDA5202, 0x8DDA5202, 40, 0 }, { /* 463 */ 0x8D8BE340, 0x00000000, 40, 0 },
{ /* 464 */ 0x8D3DCB09, 0x00000000, 40, 0 }, { /* 465 */ 0x8CF008CF, 0x8CF008CF, 40, 0 },
{ /* 466 */ 0x8CA29C04, 0x8CA29C04, 40, 0 }, { /* 467 */ 0x8C55841D, 0x00000000, 40, 0 },
{ /* 468 */ 0x8C08C08C, 0x8C08C08C, 40, 0 }, { /* 469 */ 0x8BBC50C9, 0x00000000, 40, 0 },
{ /* 470 */ 0x8B70344A, 0x8B70344A, 40, 0 }, { /* 471 */ 0x8B246A88, 0x00000000, 40, 0 },
{ /* 472 */ 0x8AD8F2FC, 0x00000000, 40, 0 }, { /* 473 */ 0x8A8DCD20, 0x00000000, 40, 0 },
{ /* 474 */ 0x8A42F870, 0x8A42F870, 40, 0 }, { /* 475 */ 0x89F8746A, 0x00000000, 40, 0 },
{ /* 476 */ 0x89AE408A, 0x00000000, 40, 0 }, { /* 477 */ 0x89645C4F, 0x89645C4F, 40, 0 },
{ /* 478 */ 0x891AC73B, 0x00000000, 40, 0 }, { /* 479 */ 0x88D180CD, 0x88D180CD, 40, 0 },
{ /* 480 */ 0x88888889, 0x00000000, 40, 0 }, { /* 481 */ 0x883FDDF0, 0x883FDDF0, 40, 0 },
{ /* 482 */ 0x87F78088, 0x00000000, 40, 0 }, { /* 483 */ 0x87AF6FD6, 0x00000000, 40, 0 },
{ /* 484 */ 0x8767AB5F, 0x8767AB5F, 40, 0 }, { /* 485 */ 0x872032AC, 0x872032AC, 40, 0 },
{ /* 486 */ 0x86D90545, 0x00000000, 40, 0 }, { /* 487 */ 0x869222B2, 0x00000000, 40, 0 },
{ /* 488 */ 0x864B8A7E, 0x00000000, 40, 0 }, { /* 489 */ 0x86053C34, 0x86053C34, 40, 0 },
{ /* 490 */ 0x85BF3761, 0x85BF3761, 40, 0 }, { /* 491 */ 0x85797B91, 0x85797B91, 40, 0 },
{ /* 492 */ 0x85340853, 0x85340853, 40, 0 }, { /* 493 */ 0x84EEDD36, 0x00000000, 40, 0 },
{ /* 494 */ 0x84A9F9C8, 0x84A9F9C8, 40, 0 }, { /* 495 */ 0x84655D9C, 0x00000000, 40, 0 },
{ /* 496 */ 0x84210842, 0x84210842, 40, 0 }, { /* 497 */ 0x83DCF94E, 0x00000000, 40, 0 },
{ /* 498 */ 0x83993052, 0x83993052, 40, 0 }, { /* 499 */ 0x8355ACE4, 0x00000000, 40, 0 },
{ /* 500 */ 0x83126E98, 0x00000000, 40, 0 }, { /* 501 */ 0x82CF7504, 0x00000000, 40, 0 },
{ /* 502 */ 0x828CBFBF, 0x00000000, 40, 0 }, { /* 503 */ 0x824A4E61, 0x00000000, 40, 0 },
{ /* 504 */ 0x82082082, 0x82082082, 40, 0 }, { /* 505 */ 0x81C635BC, 0x81C635BC, 40, 0 },
{ /* 506 */ 0x81848DA9, 0x00000000, 40, 0 }, { /* 507 */ 0x814327E4, 0x00000000, 40, 0 },
{ /* 508 */ 0x81020408, 0x81020408, 40, 0 }, { /* 509 */ 0x80C121B3, 0x00000000, 40, 0 },
{ /* 510 */ 0x80808081, 0x00000000, 40, 0 }, { /* 511 */ 0x80402010, 0x80402010, 40, 0 },
};
static const DivRatio64 div_ratio_tbl64[kMaxDivTable] = {
{ /* 0 */ 0x0000000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 1 */ 0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull, 0, 0 },
{ /* 2 */ 0x8000000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 3 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 1, 0 },
{ /* 4 */ 0x4000000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 5 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 2, 0 },
{ /* 6 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 2, 0 },
{ /* 7 */ 0x9249249249249249ull, 0x9249249249249249ull, 2, 0 },
{ /* 8 */ 0x2000000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 9 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 3, 0 },
{ /* 10 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 3, 0 },
{ /* 11 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 3, 0 },
{ /* 12 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 3, 0 },
{ /* 13 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 3, 0 },
{ /* 14 */ 0x9249249249249249ull, 0x9249249249249249ull, 3, 0 },
{ /* 15 */ 0x8888888888888889ull, 0x0000000000000000ull, 3, 0 },
{ /* 16 */ 0x1000000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 17 */ 0xF0F0F0F0F0F0F0F1ull, 0x0000000000000000ull, 4, 0 },
{ /* 18 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 4, 0 },
{ /* 19 */ 0xD79435E50D79435Full, 0x0000000000000000ull, 4, 0 },
{ /* 20 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 4, 0 },
{ /* 21 */ 0xC30C30C30C30C30Cull, 0xC30C30C30C30C30Cull, 4, 0 },
{ /* 22 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 4, 0 },
{ /* 23 */ 0xB21642C8590B2164ull, 0xB21642C8590B2164ull, 4, 0 },
{ /* 24 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 4, 0 },
{ /* 25 */ 0xA3D70A3D70A3D70Aull, 0xA3D70A3D70A3D70Aull, 4, 0 },
{ /* 26 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 4, 0 },
{ /* 27 */ 0x97B425ED097B425Full, 0x0000000000000000ull, 4, 0 },
{ /* 28 */ 0x9249249249249249ull, 0x9249249249249249ull, 4, 0 },
{ /* 29 */ 0x8D3DCB08D3DCB08Dull, 0x8D3DCB08D3DCB08Dull, 4, 0 },
{ /* 30 */ 0x8888888888888889ull, 0x0000000000000000ull, 4, 0 },
{ /* 31 */ 0x8421084210842108ull, 0x8421084210842108ull, 4, 0 },
{ /* 32 */ 0x0800000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 33 */ 0xF83E0F83E0F83E10ull, 0x0000000000000000ull, 5, 0 },
{ /* 34 */ 0xF0F0F0F0F0F0F0F1ull, 0x0000000000000000ull, 5, 0 },
{ /* 35 */ 0xEA0EA0EA0EA0EA0Full, 0x0000000000000000ull, 5, 0 },
{ /* 36 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 5, 0 },
{ /* 37 */ 0xDD67C8A60DD67C8Bull, 0x0000000000000000ull, 5, 0 },
{ /* 38 */ 0xD79435E50D79435Full, 0x0000000000000000ull, 5, 0 },
{ /* 39 */ 0xD20D20D20D20D20Dull, 0xD20D20D20D20D20Dull, 5, 0 },
{ /* 40 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 5, 0 },
{ /* 41 */ 0xC7CE0C7CE0C7CE0Dull, 0x0000000000000000ull, 5, 0 },
{ /* 42 */ 0xC30C30C30C30C30Cull, 0xC30C30C30C30C30Cull, 5, 0 },
{ /* 43 */ 0xBE82FA0BE82FA0BFull, 0x0000000000000000ull, 5, 0 },
{ /* 44 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 5, 0 },
{ /* 45 */ 0xB60B60B60B60B60Cull, 0x0000000000000000ull, 5, 0 },
{ /* 46 */ 0xB21642C8590B2164ull, 0xB21642C8590B2164ull, 5, 0 },
{ /* 47 */ 0xAE4C415C9882B931ull, 0xAE4C415C9882B931ull, 5, 0 },
{ /* 48 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 5, 0 },
{ /* 49 */ 0xA72F05397829CBC1ull, 0xA72F05397829CBC1ull, 5, 0 },
{ /* 50 */ 0xA3D70A3D70A3D70Aull, 0xA3D70A3D70A3D70Aull, 5, 0 },
{ /* 51 */ 0xA0A0A0A0A0A0A0A1ull, 0x0000000000000000ull, 5, 0 },
{ /* 52 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 5, 0 },
{ /* 53 */ 0x9A90E7D95BC609A9ull, 0x9A90E7D95BC609A9ull, 5, 0 },
{ /* 54 */ 0x97B425ED097B425Full, 0x0000000000000000ull, 5, 0 },
{ /* 55 */ 0x94F2094F2094F209ull, 0x94F2094F2094F209ull, 5, 0 },
{ /* 56 */ 0x9249249249249249ull, 0x9249249249249249ull, 5, 0 },
{ /* 57 */ 0x8FB823EE08FB823Full, 0x0000000000000000ull, 5, 0 },
{ /* 58 */ 0x8D3DCB08D3DCB08Dull, 0x8D3DCB08D3DCB08Dull, 5, 0 },
{ /* 59 */ 0x8AD8F2FBA9386823ull, 0x0000000000000000ull, 5, 0 },
{ /* 60 */ 0x8888888888888889ull, 0x0000000000000000ull, 5, 0 },
{ /* 61 */ 0x864B8A7DE6D1D608ull, 0x864B8A7DE6D1D608ull, 5, 0 },
{ /* 62 */ 0x8421084210842108ull, 0x8421084210842108ull, 5, 0 },
{ /* 63 */ 0x8208208208208208ull, 0x8208208208208208ull, 5, 0 },
{ /* 64 */ 0x0400000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 65 */ 0xFC0FC0FC0FC0FC10ull, 0x0000000000000000ull, 6, 0 },
{ /* 66 */ 0xF83E0F83E0F83E10ull, 0x0000000000000000ull, 6, 0 },
{ /* 67 */ 0xF4898D5F85BB3951ull, 0x0000000000000000ull, 6, 0 },
{ /* 68 */ 0xF0F0F0F0F0F0F0F1ull, 0x0000000000000000ull, 6, 0 },
{ /* 69 */ 0xED7303B5CC0ED731ull, 0x0000000000000000ull, 6, 0 },
{ /* 70 */ 0xEA0EA0EA0EA0EA0Full, 0x0000000000000000ull, 6, 0 },
{ /* 71 */ 0xE6C2B4481CD85689ull, 0xE6C2B4481CD85689ull, 6, 0 },
{ /* 72 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 6, 0 },
{ /* 73 */ 0xE070381C0E070382ull, 0x0000000000000000ull, 6, 0 },
{ /* 74 */ 0xDD67C8A60DD67C8Bull, 0x0000000000000000ull, 6, 0 },
{ /* 75 */ 0xDA740DA740DA740Eull, 0x0000000000000000ull, 6, 0 },
{ /* 76 */ 0xD79435E50D79435Full, 0x0000000000000000ull, 6, 0 },
{ /* 77 */ 0xD4C77B03531DEC0Eull, 0x0000000000000000ull, 6, 0 },
{ /* 78 */ 0xD20D20D20D20D20Dull, 0xD20D20D20D20D20Dull, 6, 0 },
{ /* 79 */ 0xCF6474A8819EC8EAull, 0x0000000000000000ull, 6, 0 },
{ /* 80 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 6, 0 },
{ /* 81 */ 0xCA4587E6B74F0329ull, 0xCA4587E6B74F0329ull, 6, 0 },
{ /* 82 */ 0xC7CE0C7CE0C7CE0Dull, 0x0000000000000000ull, 6, 0 },
{ /* 83 */ 0xC565C87B5F9D4D1Cull, 0x0000000000000000ull, 6, 0 },
{ /* 84 */ 0xC30C30C30C30C30Cull, 0xC30C30C30C30C30Cull, 6, 0 },
{ /* 85 */ 0xC0C0C0C0C0C0C0C1ull, 0x0000000000000000ull, 6, 0 },
{ /* 86 */ 0xBE82FA0BE82FA0BFull, 0x0000000000000000ull, 6, 0 },
{ /* 87 */ 0xBC52640BC52640BDull, 0x0000000000000000ull, 6, 0 },
{ /* 88 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 6, 0 },
{ /* 89 */ 0xB81702E05C0B8170ull, 0xB81702E05C0B8170ull, 6, 0 },
{ /* 90 */ 0xB60B60B60B60B60Cull, 0x0000000000000000ull, 6, 0 },
{ /* 91 */ 0xB40B40B40B40B40Bull, 0xB40B40B40B40B40Bull, 6, 0 },
{ /* 92 */ 0xB21642C8590B2164ull, 0xB21642C8590B2164ull, 6, 0 },
{ /* 93 */ 0xB02C0B02C0B02C0Bull, 0xB02C0B02C0B02C0Bull, 6, 0 },
{ /* 94 */ 0xAE4C415C9882B931ull, 0xAE4C415C9882B931ull, 6, 0 },
{ /* 95 */ 0xAC7691840AC76918ull, 0xAC7691840AC76918ull, 6, 0 },
{ /* 96 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 6, 0 },
{ /* 97 */ 0xA8E83F5717C0A8E8ull, 0xA8E83F5717C0A8E8ull, 6, 0 },
{ /* 98 */ 0xA72F05397829CBC1ull, 0xA72F05397829CBC1ull, 6, 0 },
{ /* 99 */ 0xA57EB50295FAD40Aull, 0xA57EB50295FAD40Aull, 6, 0 },
{ /* 100 */ 0xA3D70A3D70A3D70Aull, 0xA3D70A3D70A3D70Aull, 6, 0 },
{ /* 101 */ 0xA237C32B16CFD772ull, 0xA237C32B16CFD772ull, 6, 0 },
{ /* 102 */ 0xA0A0A0A0A0A0A0A1ull, 0x0000000000000000ull, 6, 0 },
{ /* 103 */ 0x9F1165E7254813E2ull, 0x9F1165E7254813E2ull, 6, 0 },
{ /* 104 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 6, 0 },
{ /* 105 */ 0x9C09C09C09C09C0Aull, 0x0000000000000000ull, 6, 0 },
{ /* 106 */ 0x9A90E7D95BC609A9ull, 0x9A90E7D95BC609A9ull, 6, 0 },
{ /* 107 */ 0x991F1A515885FB37ull, 0x991F1A515885FB37ull, 6, 0 },
{ /* 108 */ 0x97B425ED097B425Full, 0x0000000000000000ull, 6, 0 },
{ /* 109 */ 0x964FDA6C0964FDA7ull, 0x0000000000000000ull, 6, 0 },
{ /* 110 */ 0x94F2094F2094F209ull, 0x94F2094F2094F209ull, 6, 0 },
{ /* 111 */ 0x939A85C40939A85Cull, 0x939A85C40939A85Cull, 6, 0 },
{ /* 112 */ 0x9249249249249249ull, 0x9249249249249249ull, 6, 0 },
{ /* 113 */ 0x90FDBC090FDBC091ull, 0x0000000000000000ull, 6, 0 },
{ /* 114 */ 0x8FB823EE08FB823Full, 0x0000000000000000ull, 6, 0 },
{ /* 115 */ 0x8E78356D1408E783ull, 0x8E78356D1408E783ull, 6, 0 },
{ /* 116 */ 0x8D3DCB08D3DCB08Dull, 0x8D3DCB08D3DCB08Dull, 6, 0 },
{ /* 117 */ 0x8C08C08C08C08C09ull, 0x0000000000000000ull, 6, 0 },
{ /* 118 */ 0x8AD8F2FBA9386823ull, 0x0000000000000000ull, 6, 0 },
{ /* 119 */ 0x89AE4089AE4089AEull, 0x89AE4089AE4089AEull, 6, 0 },
{ /* 120 */ 0x8888888888888889ull, 0x0000000000000000ull, 6, 0 },
{ /* 121 */ 0x8767AB5F34E47EF1ull, 0x8767AB5F34E47EF1ull, 6, 0 },
{ /* 122 */ 0x864B8A7DE6D1D608ull, 0x864B8A7DE6D1D608ull, 6, 0 },
{ /* 123 */ 0x8534085340853408ull, 0x8534085340853408ull, 6, 0 },
{ /* 124 */ 0x8421084210842108ull, 0x8421084210842108ull, 6, 0 },
{ /* 125 */ 0x83126E978D4FDF3Bull, 0x83126E978D4FDF3Bull, 6, 0 },
{ /* 126 */ 0x8208208208208208ull, 0x8208208208208208ull, 6, 0 },
{ /* 127 */ 0x8102040810204081ull, 0x8102040810204081ull, 6, 0 },
{ /* 128 */ 0x0200000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 129 */ 0xFE03F80FE03F80FFull, 0x0000000000000000ull, 7, 0 },
{ /* 130 */ 0xFC0FC0FC0FC0FC10ull, 0x0000000000000000ull, 7, 0 },
{ /* 131 */ 0xFA232CF252138AC0ull, 0x0000000000000000ull, 7, 0 },
{ /* 132 */ 0xF83E0F83E0F83E10ull, 0x0000000000000000ull, 7, 0 },
{ /* 133 */ 0xF6603D980F6603DAull, 0x0000000000000000ull, 7, 0 },
{ /* 134 */ 0xF4898D5F85BB3951ull, 0x0000000000000000ull, 7, 0 },
{ /* 135 */ 0xF2B9D6480F2B9D65ull, 0x0000000000000000ull, 7, 0 },
{ /* 136 */ 0xF0F0F0F0F0F0F0F1ull, 0x0000000000000000ull, 7, 0 },
{ /* 137 */ 0xEF2EB71FC4345238ull, 0xEF2EB71FC4345238ull, 7, 0 },
{ /* 138 */ 0xED7303B5CC0ED731ull, 0x0000000000000000ull, 7, 0 },
{ /* 139 */ 0xEBBDB2A5C1619C8Cull, 0x0000000000000000ull, 7, 0 },
{ /* 140 */ 0xEA0EA0EA0EA0EA0Full, 0x0000000000000000ull, 7, 0 },
{ /* 141 */ 0xE865AC7B7603A197ull, 0x0000000000000000ull, 7, 0 },
{ /* 142 */ 0xE6C2B4481CD85689ull, 0xE6C2B4481CD85689ull, 7, 0 },
{ /* 143 */ 0xE525982AF70C880Full, 0x0000000000000000ull, 7, 0 },
{ /* 144 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 7, 0 },
{ /* 145 */ 0xE1FC780E1FC780E2ull, 0x0000000000000000ull, 7, 0 },
{ /* 146 */ 0xE070381C0E070382ull, 0x0000000000000000ull, 7, 0 },
{ /* 147 */ 0xDEE95C4CA037BA57ull, 0xDEE95C4CA037BA57ull, 7, 0 },
{ /* 148 */ 0xDD67C8A60DD67C8Bull, 0x0000000000000000ull, 7, 0 },
{ /* 149 */ 0xDBEB61EED19C5958ull, 0x0000000000000000ull, 7, 0 },
{ /* 150 */ 0xDA740DA740DA740Eull, 0x0000000000000000ull, 7, 0 },
{ /* 151 */ 0xD901B2036406C80Eull, 0x0000000000000000ull, 7, 0 },
{ /* 152 */ 0xD79435E50D79435Full, 0x0000000000000000ull, 7, 0 },
{ /* 153 */ 0xD62B80D62B80D62Cull, 0x0000000000000000ull, 7, 0 },
{ /* 154 */ 0xD4C77B03531DEC0Eull, 0x0000000000000000ull, 7, 0 },
{ /* 155 */ 0xD3680D3680D3680Eull, 0x0000000000000000ull, 7, 0 },
{ /* 156 */ 0xD20D20D20D20D20Dull, 0xD20D20D20D20D20Dull, 7, 0 },
{ /* 157 */ 0xD0B69FCBD2580D0Cull, 0x0000000000000000ull, 7, 0 },
{ /* 158 */ 0xCF6474A8819EC8EAull, 0x0000000000000000ull, 7, 0 },
{ /* 159 */ 0xCE168A7725080CE2ull, 0x0000000000000000ull, 7, 0 },
{ /* 160 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 7, 0 },
{ /* 161 */ 0xCB8727C065C393E0ull, 0xCB8727C065C393E0ull, 7, 0 },
{ /* 162 */ 0xCA4587E6B74F0329ull, 0xCA4587E6B74F0329ull, 7, 0 },
{ /* 163 */ 0xC907DA4E871146ADull, 0x0000000000000000ull, 7, 0 },
{ /* 164 */ 0xC7CE0C7CE0C7CE0Dull, 0x0000000000000000ull, 7, 0 },
{ /* 165 */ 0xC6980C6980C6980Dull, 0x0000000000000000ull, 7, 0 },
{ /* 166 */ 0xC565C87B5F9D4D1Cull, 0x0000000000000000ull, 7, 0 },
{ /* 167 */ 0xC4372F855D824CA6ull, 0x0000000000000000ull, 7, 0 },
{ /* 168 */ 0xC30C30C30C30C30Cull, 0xC30C30C30C30C30Cull, 7, 0 },
{ /* 169 */ 0xC1E4BBD595F6E947ull, 0xC1E4BBD595F6E947ull, 7, 0 },
{ /* 170 */ 0xC0C0C0C0C0C0C0C1ull, 0x0000000000000000ull, 7, 0 },
{ /* 171 */ 0xBFA02FE80BFA02FFull, 0x0000000000000000ull, 7, 0 },
{ /* 172 */ 0xBE82FA0BE82FA0BFull, 0x0000000000000000ull, 7, 0 },
{ /* 173 */ 0xBD69104707661AA3ull, 0x0000000000000000ull, 7, 0 },
{ /* 174 */ 0xBC52640BC52640BDull, 0x0000000000000000ull, 7, 0 },
{ /* 175 */ 0xBB3EE721A54D880Cull, 0x0000000000000000ull, 7, 0 },
{ /* 176 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 7, 0 },
{ /* 177 */ 0xB92143FA36F5E02Full, 0x0000000000000000ull, 7, 0 },
{ /* 178 */ 0xB81702E05C0B8170ull, 0xB81702E05C0B8170ull, 7, 0 },
{ /* 179 */ 0xB70FBB5A19BE3659ull, 0x0000000000000000ull, 7, 0 },
{ /* 180 */ 0xB60B60B60B60B60Cull, 0x0000000000000000ull, 7, 0 },
{ /* 181 */ 0xB509E68A9B94821Full, 0xB509E68A9B94821Full, 7, 0 },
{ /* 182 */ 0xB40B40B40B40B40Bull, 0xB40B40B40B40B40Bull, 7, 0 },
{ /* 183 */ 0xB30F63528917C80Bull, 0xB30F63528917C80Bull, 7, 0 },
{ /* 184 */ 0xB21642C8590B2164ull, 0xB21642C8590B2164ull, 7, 0 },
{ /* 185 */ 0xB11FD3B80B11FD3Cull, 0x0000000000000000ull, 7, 0 },
{ /* 186 */ 0xB02C0B02C0B02C0Bull, 0xB02C0B02C0B02C0Bull, 7, 0 },
{ /* 187 */ 0xAF3ADDC680AF3ADEull, 0x0000000000000000ull, 7, 0 },
{ /* 188 */ 0xAE4C415C9882B931ull, 0xAE4C415C9882B931ull, 7, 0 },
{ /* 189 */ 0xAD602B580AD602B6ull, 0x0000000000000000ull, 7, 0 },
{ /* 190 */ 0xAC7691840AC76918ull, 0xAC7691840AC76918ull, 7, 0 },
{ /* 191 */ 0xAB8F69E28359CD12ull, 0x0000000000000000ull, 7, 0 },
{ /* 192 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 7, 0 },
{ /* 193 */ 0xA9C84A47A07F5638ull, 0x0000000000000000ull, 7, 0 },
{ /* 194 */ 0xA8E83F5717C0A8E8ull, 0xA8E83F5717C0A8E8ull, 7, 0 },
{ /* 195 */ 0xA80A80A80A80A80Bull, 0x0000000000000000ull, 7, 0 },
{ /* 196 */ 0xA72F05397829CBC1ull, 0xA72F05397829CBC1ull, 7, 0 },
{ /* 197 */ 0xA655C4392D7B73A8ull, 0x0000000000000000ull, 7, 0 },
{ /* 198 */ 0xA57EB50295FAD40Aull, 0xA57EB50295FAD40Aull, 7, 0 },
{ /* 199 */ 0xA4A9CF1D96833751ull, 0xA4A9CF1D96833751ull, 7, 0 },
{ /* 200 */ 0xA3D70A3D70A3D70Aull, 0xA3D70A3D70A3D70Aull, 7, 0 },
{ /* 201 */ 0xA3065E3FAE7CD0E0ull, 0xA3065E3FAE7CD0E0ull, 7, 0 },
{ /* 202 */ 0xA237C32B16CFD772ull, 0xA237C32B16CFD772ull, 7, 0 },
{ /* 203 */ 0xA16B312EA8FC377Dull, 0x0000000000000000ull, 7, 0 },
{ /* 204 */ 0xA0A0A0A0A0A0A0A1ull, 0x0000000000000000ull, 7, 0 },
{ /* 205 */ 0x9FD809FD809FD80Aull, 0x0000000000000000ull, 7, 0 },
{ /* 206 */ 0x9F1165E7254813E2ull, 0x9F1165E7254813E2ull, 7, 0 },
{ /* 207 */ 0x9E4CAD23DD5F3A20ull, 0x9E4CAD23DD5F3A20ull, 7, 0 },
{ /* 208 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 7, 0 },
{ /* 209 */ 0x9CC8E160C3FB19B9ull, 0x0000000000000000ull, 7, 0 },
{ /* 210 */ 0x9C09C09C09C09C0Aull, 0x0000000000000000ull, 7, 0 },
{ /* 211 */ 0x9B4C6F9EF03A3CAAull, 0x0000000000000000ull, 7, 0 },
{ /* 212 */ 0x9A90E7D95BC609A9ull, 0x9A90E7D95BC609A9ull, 7, 0 },
{ /* 213 */ 0x99D722DABDE58F06ull, 0x99D722DABDE58F06ull, 7, 0 },
{ /* 214 */ 0x991F1A515885FB37ull, 0x991F1A515885FB37ull, 7, 0 },
{ /* 215 */ 0x9868C809868C8099ull, 0x0000000000000000ull, 7, 0 },
{ /* 216 */ 0x97B425ED097B425Full, 0x0000000000000000ull, 7, 0 },
{ /* 217 */ 0x97012E025C04B80Aull, 0x0000000000000000ull, 7, 0 },
{ /* 218 */ 0x964FDA6C0964FDA7ull, 0x0000000000000000ull, 7, 0 },
{ /* 219 */ 0x95A02568095A0257ull, 0x0000000000000000ull, 7, 0 },
{ /* 220 */ 0x94F2094F2094F209ull, 0x94F2094F2094F209ull, 7, 0 },
{ /* 221 */ 0x9445809445809446ull, 0x0000000000000000ull, 7, 0 },
{ /* 222 */ 0x939A85C40939A85Cull, 0x939A85C40939A85Cull, 7, 0 },
{ /* 223 */ 0x92F113840497889Cull, 0x92F113840497889Cull, 7, 0 },
{ /* 224 */ 0x9249249249249249ull, 0x9249249249249249ull, 7, 0 },
{ /* 225 */ 0x91A2B3C4D5E6F809ull, 0x91A2B3C4D5E6F809ull, 7, 0 },
{ /* 226 */ 0x90FDBC090FDBC091ull, 0x0000000000000000ull, 7, 0 },
{ /* 227 */ 0x905A38633E06C43Bull, 0x0000000000000000ull, 7, 0 },
{ /* 228 */ 0x8FB823EE08FB823Full, 0x0000000000000000ull, 7, 0 },
{ /* 229 */ 0x8F1779D9FDC3A219ull, 0x0000000000000000ull, 7, 0 },
{ /* 230 */ 0x8E78356D1408E783ull, 0x8E78356D1408E783ull, 7, 0 },
{ /* 231 */ 0x8DDA520237694809ull, 0x0000000000000000ull, 7, 0 },
{ /* 232 */ 0x8D3DCB08D3DCB08Dull, 0x8D3DCB08D3DCB08Dull, 7, 0 },
{ /* 233 */ 0x8CA29C046514E023ull, 0x8CA29C046514E023ull, 7, 0 },
{ /* 234 */ 0x8C08C08C08C08C09ull, 0x0000000000000000ull, 7, 0 },
{ /* 235 */ 0x8B70344A139BC75Aull, 0x8B70344A139BC75Aull, 7, 0 },
{ /* 236 */ 0x8AD8F2FBA9386823ull, 0x0000000000000000ull, 7, 0 },
{ /* 237 */ 0x8A42F8705669DB46ull, 0x8A42F8705669DB46ull, 7, 0 },
{ /* 238 */ 0x89AE4089AE4089AEull, 0x89AE4089AE4089AEull, 7, 0 },
{ /* 239 */ 0x891AC73AE9819B50ull, 0x891AC73AE9819B50ull, 7, 0 },
{ /* 240 */ 0x8888888888888889ull, 0x0000000000000000ull, 7, 0 },
{ /* 241 */ 0x87F78087F78087F8ull, 0x0000000000000000ull, 7, 0 },
{ /* 242 */ 0x8767AB5F34E47EF1ull, 0x8767AB5F34E47EF1ull, 7, 0 },
{ /* 243 */ 0x86D905447A34ACC6ull, 0x86D905447A34ACC6ull, 7, 0 },
{ /* 244 */ 0x864B8A7DE6D1D608ull, 0x864B8A7DE6D1D608ull, 7, 0 },
{ /* 245 */ 0x85BF37612CEE3C9Bull, 0x0000000000000000ull, 7, 0 },
{ /* 246 */ 0x8534085340853408ull, 0x8534085340853408ull, 7, 0 },
{ /* 247 */ 0x84A9F9C8084A9F9Dull, 0x0000000000000000ull, 7, 0 },
{ /* 248 */ 0x8421084210842108ull, 0x8421084210842108ull, 7, 0 },
{ /* 249 */ 0x839930523FBE3368ull, 0x0000000000000000ull, 7, 0 },
{ /* 250 */ 0x83126E978D4FDF3Bull, 0x83126E978D4FDF3Bull, 7, 0 },
{ /* 251 */ 0x828CBFBEB9A020A3ull, 0x828CBFBEB9A020A3ull, 7, 0 },
{ /* 252 */ 0x8208208208208208ull, 0x8208208208208208ull, 7, 0 },
{ /* 253 */ 0x81848DA8FAF0D277ull, 0x81848DA8FAF0D277ull, 7, 0 },
{ /* 254 */ 0x8102040810204081ull, 0x8102040810204081ull, 7, 0 },
{ /* 255 */ 0x8080808080808081ull, 0x0000000000000000ull, 7, 0 },
{ /* 256 */ 0x0100000000000000ull, 0x0000000000000000ull, 0, 0 },
{ /* 257 */ 0xFF00FF00FF00FF01ull, 0x0000000000000000ull, 8, 0 },
{ /* 258 */ 0xFE03F80FE03F80FFull, 0x0000000000000000ull, 8, 0 },
{ /* 259 */ 0xFD08E5500FD08E55ull, 0xFD08E5500FD08E55ull, 8, 0 },
{ /* 260 */ 0xFC0FC0FC0FC0FC10ull, 0x0000000000000000ull, 8, 0 },
{ /* 261 */ 0xFB18856506DDABA6ull, 0x0000000000000000ull, 8, 0 },
{ /* 262 */ 0xFA232CF252138AC0ull, 0x0000000000000000ull, 8, 0 },
{ /* 263 */ 0xF92FB2211855A866ull, 0x0000000000000000ull, 8, 0 },
{ /* 264 */ 0xF83E0F83E0F83E10ull, 0x0000000000000000ull, 8, 0 },
{ /* 265 */ 0xF74E3FC22C700F75ull, 0x0000000000000000ull, 8, 0 },
{ /* 266 */ 0xF6603D980F6603DAull, 0x0000000000000000ull, 8, 0 },
{ /* 267 */ 0xF57403D5D00F5741ull, 0x0000000000000000ull, 8, 0 },
{ /* 268 */ 0xF4898D5F85BB3951ull, 0x0000000000000000ull, 8, 0 },
{ /* 269 */ 0xF3A0D52CBA872337ull, 0x0000000000000000ull, 8, 0 },
{ /* 270 */ 0xF2B9D6480F2B9D65ull, 0x0000000000000000ull, 8, 0 },
{ /* 271 */ 0xF1D48BCEE0D399FBull, 0x0000000000000000ull, 8, 0 },
{ /* 272 */ 0xF0F0F0F0F0F0F0F1ull, 0x0000000000000000ull, 8, 0 },
{ /* 273 */ 0xF00F00F00F00F00Full, 0xF00F00F00F00F00Full, 8, 0 },
{ /* 274 */ 0xEF2EB71FC4345238ull, 0xEF2EB71FC4345238ull, 8, 0 },
{ /* 275 */ 0xEE500EE500EE500Full, 0x0000000000000000ull, 8, 0 },
{ /* 276 */ 0xED7303B5CC0ED731ull, 0x0000000000000000ull, 8, 0 },
{ /* 277 */ 0xEC979118F3FC4DA2ull, 0x0000000000000000ull, 8, 0 },
{ /* 278 */ 0xEBBDB2A5C1619C8Cull, 0x0000000000000000ull, 8, 0 },
{ /* 279 */ 0xEAE56403AB95900Full, 0x0000000000000000ull, 8, 0 },
{ /* 280 */ 0xEA0EA0EA0EA0EA0Full, 0x0000000000000000ull, 8, 0 },
{ /* 281 */ 0xE939651FE2D8D35Cull, 0xE939651FE2D8D35Cull, 8, 0 },
{ /* 282 */ 0xE865AC7B7603A197ull, 0x0000000000000000ull, 8, 0 },
{ /* 283 */ 0xE79372E225FE30DAull, 0x0000000000000000ull, 8, 0 },
{ /* 284 */ 0xE6C2B4481CD85689ull, 0xE6C2B4481CD85689ull, 8, 0 },
{ /* 285 */ 0xE5F36CB00E5F36CBull, 0xE5F36CB00E5F36CBull, 8, 0 },
{ /* 286 */ 0xE525982AF70C880Full, 0x0000000000000000ull, 8, 0 },
{ /* 287 */ 0xE45932D7DC52100Full, 0x0000000000000000ull, 8, 0 },
{ /* 288 */ 0xE38E38E38E38E38Full, 0x0000000000000000ull, 8, 0 },
{ /* 289 */ 0xE2C4A6886A4C2E10ull, 0x0000000000000000ull, 8, 0 },
{ /* 290 */ 0xE1FC780E1FC780E2ull, 0x0000000000000000ull, 8, 0 },
{ /* 291 */ 0xE135A9C97500E136ull, 0x0000000000000000ull, 8, 0 },
{ /* 292 */ 0xE070381C0E070382ull, 0x0000000000000000ull, 8, 0 },
{ /* 293 */ 0xDFAC1F74346C5760ull, 0x0000000000000000ull, 8, 0 },
{ /* 294 */ 0xDEE95C4CA037BA57ull, 0xDEE95C4CA037BA57ull, 8, 0 },
{ /* 295 */ 0xDE27EB2C41F3D9D2ull, 0x0000000000000000ull, 8, 0 },
{ /* 296 */ 0xDD67C8A60DD67C8Bull, 0x0000000000000000ull, 8, 0 },
{ /* 297 */ 0xDCA8F158C7F91AB9ull, 0x0000000000000000ull, 8, 0 },
{ /* 298 */ 0xDBEB61EED19C5958ull, 0x0000000000000000ull, 8, 0 },
{ /* 299 */ 0xDB2F171DF7702919ull, 0x0000000000000000ull, 8, 0 },
{ /* 300 */ 0xDA740DA740DA740Eull, 0x0000000000000000ull, 8, 0 },
{ /* 301 */ 0xD9BA4256C0366E91ull, 0x0000000000000000ull, 8, 0 },
{ /* 302 */ 0xD901B2036406C80Eull, 0x0000000000000000ull, 8, 0 },
{ /* 303 */ 0xD84A598EC9151F43ull, 0x0000000000000000ull, 8, 0 },
{ /* 304 */ 0xD79435E50D79435Full, 0x0000000000000000ull, 8, 0 },
{ /* 305 */ 0xD6DF43FCA482F00Eull, 0x0000000000000000ull, 8, 0 },
{ /* 306 */ 0xD62B80D62B80D62Cull, 0x0000000000000000ull, 8, 0 },
{ /* 307 */ 0xD578E97C3F5FE551ull, 0x0000000000000000ull, 8, 0 },
{ /* 308 */ 0xD4C77B03531DEC0Eull, 0x0000000000000000ull, 8, 0 },
{ /* 309 */ 0xD4173289870AC52Eull, 0x0000000000000000ull, 8, 0 },
{ /* 310 */ 0xD3680D3680D3680Eull, 0x0000000000000000ull, 8, 0 },
{ /* 311 */ 0xD2BA083B445250ACull, 0x0000000000000000ull, 8, 0 },
{ /* 312 */ 0xD20D20D20D20D20Dull, 0xD20D20D20D20D20Dull, 8, 0 },
{ /* 313 */ 0xD161543E28E50274ull, 0xD161543E28E50274ull, 8, 0 },
{ /* 314 */ 0xD0B69FCBD2580D0Cull, 0x0000000000000000ull, 8, 0 },
{ /* 315 */ 0xD00D00D00D00D00Dull, 0xD00D00D00D00D00Dull, 8, 0 },
{ /* 316 */ 0xCF6474A8819EC8EAull, 0x0000000000000000ull, 8, 0 },
{ /* 317 */ 0xCEBCF8BB5B4169CBull, 0x0000000000000000ull, 8, 0 },
{ /* 318 */ 0xCE168A7725080CE2ull, 0x0000000000000000ull, 8, 0 },
{ /* 319 */ 0xCD712752A886D242ull, 0x0000000000000000ull, 8, 0 },
{ /* 320 */ 0xCCCCCCCCCCCCCCCDull, 0x0000000000000000ull, 8, 0 },
{ /* 321 */ 0xCC29786C7607F99Full, 0x0000000000000000ull, 8, 0 },
{ /* 322 */ 0xCB8727C065C393E0ull, 0xCB8727C065C393E0ull, 8, 0 },
{ /* 323 */ 0xCAE5D85F1BBD6C95ull, 0xCAE5D85F1BBD6C95ull, 8, 0 },
{ /* 324 */ 0xCA4587E6B74F0329ull, 0xCA4587E6B74F0329ull, 8, 0 },
{ /* 325 */ 0xC9A633FCD967300Dull, 0x0000000000000000ull, 8, 0 },
{ /* 326 */ 0xC907DA4E871146ADull, 0x0000000000000000ull, 8, 0 },
{ /* 327 */ 0xC86A78900C86A789ull, 0xC86A78900C86A789ull, 8, 0 },
{ /* 328 */ 0xC7CE0C7CE0C7CE0Dull, 0x0000000000000000ull, 8, 0 },
{ /* 329 */ 0xC73293D789B9F838ull, 0xC73293D789B9F838ull, 8, 0 },
{ /* 330 */ 0xC6980C6980C6980Dull, 0x0000000000000000ull, 8, 0 },
{ /* 331 */ 0xC5FE740317F9D00Dull, 0x0000000000000000ull, 8, 0 },
{ /* 332 */ 0xC565C87B5F9D4D1Cull, 0x0000000000000000ull, 8, 0 },
{ /* 333 */ 0xC4CE07B00C4CE07Bull, 0xC4CE07B00C4CE07Bull, 8, 0 },
{ /* 334 */ 0xC4372F855D824CA6ull, 0x0000000000000000ull, 8, 0 },
{ /* 335 */ 0xC3A13DE60495C774ull, 0x0000000000000000ull, 8, 0 },
{ /* 336 */ 0xC30C30C30C30C30Cull, 0xC30C30C30C30C30Cull, 8, 0 },
{ /* 337 */ 0xC2780613C0309E02ull, 0x0000000000000000ull, 8, 0 },
{ /* 338 */ 0xC1E4BBD595F6E947ull, 0xC1E4BBD595F6E947ull, 8, 0 },
{ /* 339 */ 0xC152500C152500C2ull, 0x0000000000000000ull, 8, 0 },
{ /* 340 */ 0xC0C0C0C0C0C0C0C1ull, 0x0000000000000000ull, 8, 0 },
{ /* 341 */ 0xC0300C0300C0300Cull, 0xC0300C0300C0300Cull, 8, 0 },
{ /* 342 */ 0xBFA02FE80BFA02FFull, 0x0000000000000000ull, 8, 0 },
{ /* 343 */ 0xBF112A8AD278E8DDull, 0x0000000000000000ull, 8, 0 },
{ /* 344 */ 0xBE82FA0BE82FA0BFull, 0x0000000000000000ull, 8, 0 },
{ /* 345 */ 0xBDF59C91700BDF5Aull, 0x0000000000000000ull, 8, 0 },
{ /* 346 */ 0xBD69104707661AA3ull, 0x0000000000000000ull, 8, 0 },
{ /* 347 */ 0xBCDD535DB1CC5B7Bull, 0xBCDD535DB1CC5B7Bull, 8, 0 },
{ /* 348 */ 0xBC52640BC52640BDull, 0x0000000000000000ull, 8, 0 },
{ /* 349 */ 0xBBC8408CD63069A1ull, 0x0000000000000000ull, 8, 0 },
{ /* 350 */ 0xBB3EE721A54D880Cull, 0x0000000000000000ull, 8, 0 },
{ /* 351 */ 0xBAB656100BAB6561ull, 0xBAB656100BAB6561ull, 8, 0 },
{ /* 352 */ 0xBA2E8BA2E8BA2E8Cull, 0x0000000000000000ull, 8, 0 },
{ /* 353 */ 0xB9A7862A0FF46588ull, 0x0000000000000000ull, 8, 0 },
{ /* 354 */ 0xB92143FA36F5E02Full, 0x0000000000000000ull, 8, 0 },
{ /* 355 */ 0xB89BC36CE3E0453Bull, 0x0000000000000000ull, 8, 0 },
{ /* 356 */ 0xB81702E05C0B8170ull, 0xB81702E05C0B8170ull, 8, 0 },
{ /* 357 */ 0xB79300B79300B793ull, 0xB79300B79300B793ull, 8, 0 },
{ /* 358 */ 0xB70FBB5A19BE3659ull, 0x0000000000000000ull, 8, 0 },
{ /* 359 */ 0xB68D31340E4307D8ull, 0xB68D31340E4307D8ull, 8, 0 },
{ /* 360 */ 0xB60B60B60B60B60Cull, 0x0000000000000000ull, 8, 0 },
{ /* 361 */ 0xB58A485518D1E7E4ull, 0x0000000000000000ull, 8, 0 },
{ /* 362 */ 0xB509E68A9B94821Full, 0xB509E68A9B94821Full, 8, 0 },
{ /* 363 */ 0xB48A39D44685FE97ull, 0x0000000000000000ull, 8, 0 },
{ /* 364 */ 0xB40B40B40B40B40Bull, 0xB40B40B40B40B40Bull, 8, 0 },
{ /* 365 */ 0xB38CF9B00B38CF9Bull, 0xB38CF9B00B38CF9Bull, 8, 0 },
{ /* 366 */ 0xB30F63528917C80Bull, 0xB30F63528917C80Bull, 8, 0 },
{ /* 367 */ 0xB2927C29DA5519CFull, 0xB2927C29DA5519CFull, 8, 0 },
{ /* 368 */ 0xB21642C8590B2164ull, 0xB21642C8590B2164ull, 8, 0 },
{ /* 369 */ 0xB19AB5C45606F00Bull, 0xB19AB5C45606F00Bull, 8, 0 },
{ /* 370 */ 0xB11FD3B80B11FD3Cull, 0x0000000000000000ull, 8, 0 },
{ /* 371 */ 0xB0A59B418D749D54ull, 0x0000000000000000ull, 8, 0 },
{ /* 372 */ 0xB02C0B02C0B02C0Bull, 0xB02C0B02C0B02C0Bull, 8, 0 },
{ /* 373 */ 0xAFB321A1496FDF0Full, 0x0000000000000000ull, 8, 0 },
{ /* 374 */ 0xAF3ADDC680AF3ADEull, 0x0000000000000000ull, 8, 0 },
{ /* 375 */ 0xAEC33E1F671529A5ull, 0x0000000000000000ull, 8, 0 },
{ /* 376 */ 0xAE4C415C9882B931ull, 0xAE4C415C9882B931ull, 8, 0 },
{ /* 377 */ 0xADD5E6323FD48A87ull, 0x0000000000000000ull, 8, 0 },
{ /* 378 */ 0xAD602B580AD602B6ull, 0x0000000000000000ull, 8, 0 },
{ /* 379 */ 0xACEB0F891E6551BBull, 0xACEB0F891E6551BBull, 8, 0 },
{ /* 380 */ 0xAC7691840AC76918ull, 0xAC7691840AC76918ull, 8, 0 },
{ /* 381 */ 0xAC02B00AC02B00ACull, 0xAC02B00AC02B00ACull, 8, 0 },
{ /* 382 */ 0xAB8F69E28359CD12ull, 0x0000000000000000ull, 8, 0 },
{ /* 383 */ 0xAB1CBDD3E2970F60ull, 0x0000000000000000ull, 8, 0 },
{ /* 384 */ 0xAAAAAAAAAAAAAAABull, 0x0000000000000000ull, 8, 0 },
{ /* 385 */ 0xAA392F35DC17F00Bull, 0x0000000000000000ull, 8, 0 },
{ /* 386 */ 0xA9C84A47A07F5638ull, 0x0000000000000000ull, 8, 0 },
{ /* 387 */ 0xA957FAB5402A55FFull, 0x0000000000000000ull, 8, 0 },
{ /* 388 */ 0xA8E83F5717C0A8E8ull, 0xA8E83F5717C0A8E8ull, 8, 0 },
{ /* 389 */ 0xA87917088E262B6Full, 0xA87917088E262B6Full, 8, 0 },
{ /* 390 */ 0xA80A80A80A80A80Bull, 0x0000000000000000ull, 8, 0 },
{ /* 391 */ 0xA79C7B16EA64D422ull, 0xA79C7B16EA64D422ull, 8, 0 },
{ /* 392 */ 0xA72F05397829CBC1ull, 0xA72F05397829CBC1ull, 8, 0 },
{ /* 393 */ 0xA6C21DF6E1625C80ull, 0x0000000000000000ull, 8, 0 },
{ /* 394 */ 0xA655C4392D7B73A8ull, 0x0000000000000000ull, 8, 0 },
{ /* 395 */ 0xA5E9F6ED347F0721ull, 0xA5E9F6ED347F0721ull, 8, 0 },
{ /* 396 */ 0xA57EB50295FAD40Aull, 0xA57EB50295FAD40Aull, 8, 0 },
{ /* 397 */ 0xA513FD6BB00A5140ull, 0x0000000000000000ull, 8, 0 },
{ /* 398 */ 0xA4A9CF1D96833751ull, 0xA4A9CF1D96833751ull, 8, 0 },
{ /* 399 */ 0xA44029100A440291ull, 0xA44029100A440291ull, 8, 0 },
{ /* 400 */ 0xA3D70A3D70A3D70Aull, 0xA3D70A3D70A3D70Aull, 8, 0 },
{ /* 401 */ 0xA36E71A2CB033128ull, 0xA36E71A2CB033128ull, 8, 0 },
{ /* 402 */ 0xA3065E3FAE7CD0E0ull, 0xA3065E3FAE7CD0E0ull, 8, 0 },
{ /* 403 */ 0xA29ECF163BB6500Aull, 0xA29ECF163BB6500Aull, 8, 0 },
{ /* 404 */ 0xA237C32B16CFD772ull, 0xA237C32B16CFD772ull, 8, 0 },
{ /* 405 */ 0xA1D139855F7268EEull, 0x0000000000000000ull, 8, 0 },
{ /* 406 */ 0xA16B312EA8FC377Dull, 0x0000000000000000ull, 8, 0 },
{ /* 407 */ 0xA105A932F2CA891Full, 0x0000000000000000ull, 8, 0 },
{ /* 408 */ 0xA0A0A0A0A0A0A0A1ull, 0x0000000000000000ull, 8, 0 },
{ /* 409 */ 0xA03C1688732B3032ull, 0xA03C1688732B3032ull, 8, 0 },
{ /* 410 */ 0x9FD809FD809FD80Aull, 0x0000000000000000ull, 8, 0 },
{ /* 411 */ 0x9F747A152D7836D0ull, 0x9F747A152D7836D0ull, 8, 0 },
{ /* 412 */ 0x9F1165E7254813E2ull, 0x9F1165E7254813E2ull, 8, 0 },
{ /* 413 */ 0x9EAECC8D53AE2DDFull, 0x0000000000000000ull, 8, 0 },
{ /* 414 */ 0x9E4CAD23DD5F3A20ull, 0x9E4CAD23DD5F3A20ull, 8, 0 },
{ /* 415 */ 0x9DEB06C9194AA416ull, 0x9DEB06C9194AA416ull, 8, 0 },
{ /* 416 */ 0x9D89D89D89D89D8Aull, 0x0000000000000000ull, 8, 0 },
{ /* 417 */ 0x9D2921C3D6411308ull, 0x0000000000000000ull, 8, 0 },
{ /* 418 */ 0x9CC8E160C3FB19B9ull, 0x0000000000000000ull, 8, 0 },
{ /* 419 */ 0x9C69169B30446DFAull, 0x0000000000000000ull, 8, 0 },
{ /* 420 */ 0x9C09C09C09C09C0Aull, 0x0000000000000000ull, 8, 0 },
{ /* 421 */ 0x9BAADE8E4A2F6E10ull, 0x0000000000000000ull, 8, 0 },
{ /* 422 */ 0x9B4C6F9EF03A3CAAull, 0x0000000000000000ull, 8, 0 },
{ /* 423 */ 0x9AEE72FCF957C10Full, 0x9AEE72FCF957C10Full, 8, 0 },
{ /* 424 */ 0x9A90E7D95BC609A9ull, 0x9A90E7D95BC609A9ull, 8, 0 },
{ /* 425 */ 0x9A33CD67009A33CEull, 0x0000000000000000ull, 8, 0 },
{ /* 426 */ 0x99D722DABDE58F06ull, 0x99D722DABDE58F06ull, 8, 0 },
{ /* 427 */ 0x997AE76B50EFD00Aull, 0x0000000000000000ull, 8, 0 },
{ /* 428 */ 0x991F1A515885FB37ull, 0x991F1A515885FB37ull, 8, 0 },
{ /* 429 */ 0x98C3BAC74F5DB00Aull, 0x0000000000000000ull, 8, 0 },
{ /* 430 */ 0x9868C809868C8099ull, 0x0000000000000000ull, 8, 0 },
{ /* 431 */ 0x980E4156201301C8ull, 0x980E4156201301C8ull, 8, 0 },
{ /* 432 */ 0x97B425ED097B425Full, 0x0000000000000000ull, 8, 0 },
{ /* 433 */ 0x975A750FF68A58AFull, 0x975A750FF68A58AFull, 8, 0 },
{ /* 434 */ 0x97012E025C04B80Aull, 0x0000000000000000ull, 8, 0 },
{ /* 435 */ 0x96A850096A850097ull, 0x0000000000000000ull, 8, 0 },
{ /* 436 */ 0x964FDA6C0964FDA7ull, 0x0000000000000000ull, 8, 0 },
{ /* 437 */ 0x95F7CC72D1B887E9ull, 0x0000000000000000ull, 8, 0 },
{ /* 438 */ 0x95A02568095A0257ull, 0x0000000000000000ull, 8, 0 },
{ /* 439 */ 0x9548E4979E0829FDull, 0x0000000000000000ull, 8, 0 },
{ /* 440 */ 0x94F2094F2094F209ull, 0x94F2094F2094F209ull, 8, 0 },
{ /* 441 */ 0x949B92DDC02526E5ull, 0x0000000000000000ull, 8, 0 },
{ /* 442 */ 0x9445809445809446ull, 0x0000000000000000ull, 8, 0 },
{ /* 443 */ 0x93EFD1C50E726B7Cull, 0x93EFD1C50E726B7Cull, 8, 0 },
{ /* 444 */ 0x939A85C40939A85Cull, 0x939A85C40939A85Cull, 8, 0 },
{ /* 445 */ 0x93459BE6B009345Aull, 0x0000000000000000ull, 8, 0 },
{ /* 446 */ 0x92F113840497889Cull, 0x92F113840497889Cull, 8, 0 },
{ /* 447 */ 0x929CEBF48BBD90E5ull, 0x929CEBF48BBD90E5ull, 8, 0 },
{ /* 448 */ 0x9249249249249249ull, 0x9249249249249249ull, 8, 0 },
{ /* 449 */ 0x91F5BCB8BB02D9CDull, 0x0000000000000000ull, 8, 0 },
{ /* 450 */ 0x91A2B3C4D5E6F809ull, 0x91A2B3C4D5E6F809ull, 8, 0 },
{ /* 451 */ 0x9150091500915009ull, 0x9150091500915009ull, 8, 0 },
{ /* 452 */ 0x90FDBC090FDBC091ull, 0x0000000000000000ull, 8, 0 },
{ /* 453 */ 0x90ABCC0242AF3009ull, 0x90ABCC0242AF3009ull, 8, 0 },
{ /* 454 */ 0x905A38633E06C43Bull, 0x0000000000000000ull, 8, 0 },
{ /* 455 */ 0x9009009009009009ull, 0x9009009009009009ull, 8, 0 },
{ /* 456 */ 0x8FB823EE08FB823Full, 0x0000000000000000ull, 8, 0 },
{ /* 457 */ 0x8F67A1E3FDC26178ull, 0x8F67A1E3FDC26178ull, 8, 0 },
{ /* 458 */ 0x8F1779D9FDC3A219ull, 0x0000000000000000ull, 8, 0 },
{ /* 459 */ 0x8EC7AB397255E41Dull, 0x8EC7AB397255E41Dull, 8, 0 },
{ /* 460 */ 0x8E78356D1408E783ull, 0x8E78356D1408E783ull, 8, 0 },
{ /* 461 */ 0x8E2917E0E702C6CEull, 0x0000000000000000ull, 8, 0 },
{ /* 462 */ 0x8DDA520237694809ull, 0x0000000000000000ull, 8, 0 },
{ /* 463 */ 0x8D8BE33F95D71590ull, 0x8D8BE33F95D71590ull, 8, 0 },
{ /* 464 */ 0x8D3DCB08D3DCB08Dull, 0x8D3DCB08D3DCB08Dull, 8, 0 },
{ /* 465 */ 0x8CF008CF008CF009ull, 0x0000000000000000ull, 8, 0 },
{ /* 466 */ 0x8CA29C046514E023ull, 0x8CA29C046514E023ull, 8, 0 },
{ /* 467 */ 0x8C55841C815ED5CAull, 0x8C55841C815ED5CAull, 8, 0 },
{ /* 468 */ 0x8C08C08C08C08C09ull, 0x0000000000000000ull, 8, 0 },
{ /* 469 */ 0x8BBC50C8DEB420C0ull, 0x8BBC50C8DEB420C0ull, 8, 0 },
{ /* 470 */ 0x8B70344A139BC75Aull, 0x8B70344A139BC75Aull, 8, 0 },
{ /* 471 */ 0x8B246A87E19008B2ull, 0x8B246A87E19008B2ull, 8, 0 },
{ /* 472 */ 0x8AD8F2FBA9386823ull, 0x0000000000000000ull, 8, 0 },
{ /* 473 */ 0x8A8DCD1FEEAE465Cull, 0x8A8DCD1FEEAE465Cull, 8, 0 },
{ /* 474 */ 0x8A42F8705669DB46ull, 0x8A42F8705669DB46ull, 8, 0 },
{ /* 475 */ 0x89F87469A23920E0ull, 0x89F87469A23920E0ull, 8, 0 },
{ /* 476 */ 0x89AE4089AE4089AEull, 0x89AE4089AE4089AEull, 8, 0 },
{ /* 477 */ 0x89645C4F6E055DECull, 0x0000000000000000ull, 8, 0 },
{ /* 478 */ 0x891AC73AE9819B50ull, 0x891AC73AE9819B50ull, 8, 0 },
{ /* 479 */ 0x88D180CD3A4133D7ull, 0x88D180CD3A4133D7ull, 8, 0 },
{ /* 480 */ 0x8888888888888889ull, 0x0000000000000000ull, 8, 0 },
{ /* 481 */ 0x883FDDF00883FDDFull, 0x883FDDF00883FDDFull, 8, 0 },
{ /* 482 */ 0x87F78087F78087F8ull, 0x0000000000000000ull, 8, 0 },
{ /* 483 */ 0x87AF6FD5992D0D40ull, 0x87AF6FD5992D0D40ull, 8, 0 },
{ /* 484 */ 0x8767AB5F34E47EF1ull, 0x8767AB5F34E47EF1ull, 8, 0 },
{ /* 485 */ 0x872032AC13008720ull, 0x872032AC13008720ull, 8, 0 },
{ /* 486 */ 0x86D905447A34ACC6ull, 0x86D905447A34ACC6ull, 8, 0 },
{ /* 487 */ 0x869222B1ACF1CE96ull, 0x869222B1ACF1CE96ull, 8, 0 },
{ /* 488 */ 0x864B8A7DE6D1D608ull, 0x864B8A7DE6D1D608ull, 8, 0 },
{ /* 489 */ 0x86053C345A0B8473ull, 0x86053C345A0B8473ull, 8, 0 },
{ /* 490 */ 0x85BF37612CEE3C9Bull, 0x0000000000000000ull, 8, 0 },
{ /* 491 */ 0x85797B917765AB89ull, 0x85797B917765AB89ull, 8, 0 },
{ /* 492 */ 0x8534085340853408ull, 0x8534085340853408ull, 8, 0 },
{ /* 493 */ 0x84EEDD357C1B0085ull, 0x0000000000000000ull, 8, 0 },
{ /* 494 */ 0x84A9F9C8084A9F9Dull, 0x0000000000000000ull, 8, 0 },
{ /* 495 */ 0x84655D9BAB2F1008ull, 0x84655D9BAB2F1008ull, 8, 0 },
{ /* 496 */ 0x8421084210842108ull, 0x8421084210842108ull, 8, 0 },
{ /* 497 */ 0x83DCF94DC7570CE1ull, 0x0000000000000000ull, 8, 0 },
{ /* 498 */ 0x839930523FBE3368ull, 0x0000000000000000ull, 8, 0 },
{ /* 499 */ 0x8355ACE3C897DB10ull, 0x0000000000000000ull, 8, 0 },
{ /* 500 */ 0x83126E978D4FDF3Bull, 0x83126E978D4FDF3Bull, 8, 0 },
{ /* 501 */ 0x82CF750393AC3319ull, 0x82CF750393AC3319ull, 8, 0 },
{ /* 502 */ 0x828CBFBEB9A020A3ull, 0x828CBFBEB9A020A3ull, 8, 0 },
{ /* 503 */ 0x824A4E60B3262BC5ull, 0x0000000000000000ull, 8, 0 },
{ /* 504 */ 0x8208208208208208ull, 0x8208208208208208ull, 8, 0 },
{ /* 505 */ 0x81C635BC123FDF8Eull, 0x81C635BC123FDF8Eull, 8, 0 },
{ /* 506 */ 0x81848DA8FAF0D277ull, 0x81848DA8FAF0D277ull, 8, 0 },
{ /* 507 */ 0x814327E3B94F462Full, 0x814327E3B94F462Full, 8, 0 },
{ /* 508 */ 0x8102040810204081ull, 0x8102040810204081ull, 8, 0 },
{ /* 509 */ 0x80C121B28BD1BA98ull, 0x0000000000000000ull, 8, 0 },
{ /* 510 */ 0x8080808080808081ull, 0x0000000000000000ull, 8, 0 },
{ /* 511 */ 0x8040201008040201ull, 0x8040201008040201ull, 8, 0 },
};
static inline
DivRatio32_v1 preComputeDiv_u32_v1(std::uint32_t divisor)
{
DivRatio32_v1 divRatio;
std::uint32_t shift = floorLog2<std::uint32_t>(divisor);
std::uint32_t multi;
if ((divisor & (divisor - 1)) == 0) {
if (divisor == 0)
multi = 0;
else if (divisor == 1)
multi = 0xFFFFFFFFul;
else
multi = 1ul << (32 - shift);
shift = 0;
} else {
// m = 2 ^ (32 + k)
std::uint64_t m_64 = (std::uint64_t)1u << (32 + shift);
// f = m / d
double f = (double)m_64 / divisor;
// Mul = |f| + 1;
multi = (std::uint32_t)ceil(f);
}
divRatio.mul = multi;
divRatio.shift = shift;
return divRatio;
}
template <int version = 0>
static inline
DivRatio32 preComputeDiv_u32(std::uint32_t divisor)
{
std::uint32_t shift = floorLog2<std::uint32_t>(divisor);
std::uint32_t multi, add = 0;
if ((divisor & (divisor - 1)) == 0) {
if (divisor == 0) {
multi = 0;
}
else if (divisor == 1) {
multi = 0xFFFFFFFFul;
add = 0xFFFFFFFFul;
}
else {
multi = 1ul << (32 - shift);
}
shift = 0;
} else {
// m = 2 ^ (32 + k)
std::uint64_t m_64 = (std::uint64_t)1u << (32 + shift);
std::uint32_t multi_down = (std::uint32_t)(m_64 / divisor);
// Mul = |f| + 1;
std::uint32_t multi_up = multi_down + 1;
// f = m / d
double f = (double)multi_down + (double)(m_64 % divisor) / divisor;
//
// See: https://bbs.emath.ac.cn/thread-521-3-1.html
//
// err = Mul - f
double f_err = (double)multi_up - f;
// maxN = | m / (d * err) |
double max_N = (double)m_64 / divisor / f_err;
std::uint32_t maxN = (std::uint32_t)max_N;
bool failed01 = (max_N < (double)0xFFFFFFFFul);
//
// See: https://github.com/rubenvannieuwpoort/division-by-constant-integers/blob/master/unsigned/runtime/unsigned_division.h
//
// product_up = Mul * d
std::uint32_t product_up = multi_up * divisor;
bool failed02 = (product_up > (1u << shift));
//
// See: https://stackoverflow.com/questions/45353629/repeated-integer-division-by-a-runtime-constant-value
//
// r = m - Mul_down * d
std::uint32_t remainder = static_cast<std::uint32_t>(m_64) - multi_down * divisor;
assert(divisor > remainder);
// err == product_up
std::uint32_t err = divisor - remainder;
bool failed03 = (err >= (1u << shift));
static const double kEpsilon = 0.005;
// If f_err < ((2 ^ k) / d), use round up (ceil).
multi = multi_up;
bool failed = false;
if (failed01 && failed02 && failed03) {
failed = true;
}
else if (failed01 || failed02 || failed03) {
printf("divisor = %u have errors. [ multi_up = %u ]\n", divisor, multi_up);
printf("failed01 = %d, failed02 = %d, failed03 = %d\n\n",
(int)failed01, (int)failed02, (int)failed03);
failed = true;
}
if (failed) {
if (version == 2) {
// If f_err >= ((2 ^ k) / d), use round down, and add = multi_down.
multi = multi_down;
add = multi_down;
} else {
// In order to avoid the error of double precision floating-point.
// In fact, due to the precision of double, most of the time,
// f_err is a little larger than (err / divisor),
// so, there is no problem without correcting this error.
// However, we still fxied it here.
double fix_f_err = f_err + kEpsilon;
// Here, we use (err / divisor) instead of f_err.
fix_f_err = ((double)err / divisor) + kEpsilon;
// The maximum value is 1.0 times.
if (fix_f_err > 1.0)
fix_f_err = 1.0;
// If f_err >= ((2 ^ k) / d), use round down, and add = multi_down.
multi = multi_down;
add = (std::uint32_t)((double)multi_down * fix_f_err);
}
}
}
DivRatio32 divRatio;
divRatio.mul = multi;
divRatio.add = add;
divRatio.shift = shift;
divRatio.reserve = 0;
return divRatio;
}
static inline
DivRatio32 preComputeDiv_u32_64(std::uint32_t divisor)
{
std::uint32_t shift = floorLog2<std::uint32_t>(divisor);
std::uint32_t multi, add = 0;
if ((divisor & (divisor - 1)) == 0) {
if (divisor == 0) {
multi = 0;
}
else if (divisor == 1) {
multi = 0xFFFFFFFFul;
add = 0xFFFFFFFFul;
}
else {
multi = 1ull << (32 - shift);
}
shift = 0;
} else {
// m = 2 ^ (32 + k)
std::uint64_t m_64 = (std::uint64_t)1u << (32 + shift);
std::uint32_t multi_down = (std::uint32_t)(m_64 / divisor);
// Mul = |f| + 1;
std::uint32_t multi_up = multi_down + 1;
// f = m / d
double f = (double)multi_down + (double)(m_64 % divisor) / divisor;
//
// See: https://bbs.emath.ac.cn/thread-521-3-1.html
//
// err = Mul - f
double f_err = (double)multi_up - f;
// maxN = | m / (d * err) |
double max_N = (double)m_64 / divisor / f_err;
std::uint64_t maxN = (std::uint64_t)max_N;
bool failed01 = (max_N < (double)0xFFFFFFFFul);
//
// See: https://github.com/rubenvannieuwpoort/division-by-constant-integers/blob/master/unsigned/runtime/unsigned_division.h
//
// product_up = Mul * d
std::uint32_t product_up = (std::uint32_t)multi_up * divisor;
bool failed02 = (product_up > (1u << shift));
//
// See: https://stackoverflow.com/questions/45353629/repeated-integer-division-by-a-runtime-constant-value
//
// r = m - Mul_down * d
std::uint32_t remainder = (std::uint32_t)m_64 - (std::uint32_t)multi_down * divisor;
assert(divisor > remainder);
// err == product_up
std::uint32_t err = divisor - remainder;
bool failed03 = (err >= (1u << shift));
// If f_err < ((2 ^ k) / d), use round up (ceil).
multi = multi_up;
m_64 = (std::uint64_t)1u << (33 + shift);
std::uint64_t new_multi_down = m_64 / divisor;
std::uint64_t new_multi_up = new_multi_down + 1;
if (failed01 && failed02 && failed03) {
// If f_err >= ((2 ^ k) / d), use (2 * q' + 1), and shift + 1.
assert(new_multi_up == ((std::uint64_t)multi_down * 2 + 1));
multi = multi_down;
add = multi_down;
}
else if (failed01 || failed02 || failed03) {
multi = multi_down;
add = multi_down;
printf("divisor = %u have errors. [ multi_up = %u ]\n",
divisor, (std::uint32_t)multi_up);
printf("failed01 = %d, failed02 = %d, failed03 = %d\n\n",
(int)failed01, (int)failed02, (int)failed03);
//assert(false);
}
}
DivRatio32 divRatio;
divRatio.mul = multi;
divRatio.add = add;
divRatio.shift = 32 + shift;
divRatio.reserve = 0;
return divRatio;
}
static inline
DivRatio64 preComputeDiv_u64(std::uint64_t divisor)
{
std::uint32_t shift = floorLog2<std::uint64_t>(divisor);
std::uint64_t multi, add = 0;
if ((divisor & (divisor - 1)) == 0) {
if (divisor == 0) {
multi = 0;
}
else if (divisor == 1) {
multi = 0xFFFFFFFFFFFFFFFFull;
add = 0xFFFFFFFFFFFFFFFFull;
}
else {
multi = 1ull << (64 - shift);
}
shift = 0;
} else {
#if defined(_MSC_VER)
_uint128_t shift_128 = 1;
shift_128 <<= (64 + shift);
std::uint64_t multi_down = (std::uint64_t)(shift_128 / (_uint128_t)divisor);
std::uint64_t multi_up = multi_down + 1;
// m = 2 ^ (64 + k)
_uint128_t m_128 = (_uint128_t)1ull << (64 + shift);
std::uint64_t f_multi = (std::uint64_t)(m_128 / (_uint128_t)divisor);
std::uint64_t f_remainder= (std::uint64_t)(m_128 % (_uint128_t)divisor);
// f = m / d
double f = (double)f_multi + (double)f_remainder / divisor;
// Mul = |f| + 1;
std::uint64_t f_multi_up = (std::uint64_t)ceil(f);
std::uint64_t f_multi_down = f_multi_up - 1;
//
// See: https://bbs.emath.ac.cn/thread-521-3-1.html
//
// err = Mul - f
double f_err = (double)f_multi_up - f;
// maxN = | m / (d * err) |
double max_N = (double)m_128 / divisor / f_err;
std::uint64_t maxN = (std::uint64_t)max_N;
bool failed01 = (max_N < (double)0xFFFFFFFFul);
//
// See: https://github.com/rubenvannieuwpoort/division-by-constant-integers/blob/master/unsigned/runtime/unsigned_division.h
//
// product_up = Mul * d
std::uint64_t product_up = multi_up * divisor;
bool failed02 = (product_up > (1ull << shift));
//
// See: https://stackoverflow.com/questions/45353629/repeated-integer-division-by-a-runtime-constant-value
//
// r = m - Mul_down * d
std::uint64_t remainder = static_cast<std::uint64_t>(m_128) - multi_down * divisor;
assert(divisor > remainder);
// err == product_up
std::uint64_t err = divisor - remainder;
bool failed03 = (err > (1ull << shift));
static const double kEpsilon = 0.005;
// If f_err < ((2 ^ k) / d), use round up (ceil).
multi = multi_up;
if (failed01 && failed02 && failed03) {
// If f_err >= ((2 ^ k) / d), use round down, and add = multi_down.
multi = multi_down;
add = multi_down;
}
else if (failed01 || failed02 || failed03) {
multi = multi_down;
add = multi_down;
printf("divisor = [0x%08X] %u have errors. [ multi_up = 0x%08X%08X ]\n",
(std::uint32_t)(divisor >> 32),
(std::uint32_t)(divisor & 0xFFFFFFFFul),
(std::uint32_t)(multi_up >> 32),
(std::uint32_t)(multi_up & 0xFFFFFFFFul));
printf("failed01 = %d, failed02 = %d, failed03 = %d\n\n",
(int)failed01, (int)failed02, (int)failed03);
//assert(false);
}
#else
__uint128_t shift_128 = (__uint128_t)1 << (64 + shift);
// In fact, (shift_128 % divisor) isn't equal to 0 for ever when divisor isn't a even.
std::uint64_t multi_up;
if ((shift_128 % divisor) != 0)
multi_up = (std::uint64_t)(shift_128 / divisor) + 1;
else
multi_up = (std::uint64_t)(shift_128 / divisor);
std::uint64_t multi_down = multi_up - 1;
// m = 2 ^ (64 + k)
__uint128_t m_128 = (__uint128_t)1ull << (64 + shift);
std::uint64_t f_multi = (std::uint64_t)(m_128 / divisor);
std::uint64_t f_remainder= (std::uint64_t)(m_128 % divisor);
// f = m / d
double f = (double)f_multi + (double)f_remainder / divisor;
// Mul = |f| + 1;
std::uint64_t f_multi_up = (std::uint64_t)ceil(f);
std::uint64_t f_multi_down = f_multi_up - 1;
//
// See: https://bbs.emath.ac.cn/thread-521-3-1.html
//
// err = Mul - f
double f_err = (double)f_multi_up - f;
// maxN = | m / (d * err) |
double max_N = (double)m_128 / divisor / f_err;
std::uint64_t maxN = (std::uint64_t)max_N;
bool failed01 = (max_N < (double)0xFFFFFFFFul);
//
// See: https://github.com/rubenvannieuwpoort/division-by-constant-integers/blob/master/unsigned/runtime/unsigned_division.h
//
// product_up = Mul * d
std::uint64_t product_up = multi_up * divisor;
bool failed02 = (product_up > (1ull << shift));
//
// See: https://stackoverflow.com/questions/45353629/repeated-integer-division-by-a-runtime-constant-value
//
// r = m - Mul_down * d
std::uint64_t remainder = static_cast<std::uint64_t>(m_128) - multi_down * divisor;
assert(divisor > remainder);
// err == product_up
std::uint64_t err = divisor - remainder;
bool failed03 = (err > (1ull << shift));
static const double kEpsilon = 0.005;
// If f_err < ((2 ^ k) / d), use round up (ceil).
multi = multi_up;
if (failed01 && failed02 && failed03) {
// If f_err >= ((2 ^ k) / d), use round down, and add = multi_down.
multi = multi_down;
add = multi_down;
}
else if (failed01 || failed02 || failed03) {
multi = multi_down;
add = multi_down;
printf("divisor = [0x%08X] %u have errors. [ multi_up = 0x%08X%08X ]\n",
(std::uint32_t)(divisor >> 32),
(std::uint32_t)(divisor & 0xFFFFFFFFul),
(std::uint32_t)(multi_up >> 32),
(std::uint32_t)(multi_up & 0xFFFFFFFFul));
printf("failed01 = %d, failed02 = %d, failed03 = %d\n\n",
(int)failed01, (int)failed02, (int)failed03);
//assert(false);
}
#endif
}
DivRatio64 divRatio;
divRatio.mul = multi;
divRatio.add = add;
divRatio.shift = shift;
divRatio.reserve = 0;
return divRatio;
}
static inline
void genDivRatioTbl_u32_v1()
{
DivRatio32_v1 divRatioTbl[kMaxDivTable];
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
divRatioTbl[n] = preComputeDiv_u32_v1(n);
}
FILE * fp = fopen("div_ratio_tbl32_v1.h", "w");
if (fp == NULL) return;
fprintf(fp, "\n");
fprintf(fp, "static const DivRatio32_v1 div_ratio_tbl32_v1[kMaxDivTable] = {\n");
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
if ((n % 2) == 0) {
fprintf(fp, " ");
}
fprintf(fp, "{ /* %3u */ 0x%08X, %2u },",
n,
divRatioTbl[n].mul,
divRatioTbl[n].shift);
if ((n % 2) == 1) {
fprintf(fp, "\n");
} else {
fprintf(fp, " ");
}
}
fprintf(fp, "};\n");
fclose(fp);
}
static inline
void genDivRatioTbl_u32_v2()
{
DivRatio32 divRatioTbl[kMaxDivTable];
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
divRatioTbl[n] = preComputeDiv_u32<2>(n);
}
FILE * fp = fopen("div_ratio_tbl32_v2.h", "w");
if (fp == NULL) return;
fprintf(fp, "\n");
fprintf(fp, "static const DivRatio32 div_ratio_tbl32_v2[kMaxDivTable] = {\n");
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
if ((n % 2) == 0) {
fprintf(fp, " ");
}
fprintf(fp, "{ /* %3u */ 0x%08X, 0x%08X, %2u, 0 },",
n,
divRatioTbl[n].mul,
divRatioTbl[n].add,
divRatioTbl[n].shift);
if ((n % 2) == 1) {
fprintf(fp, "\n");
} else {
fprintf(fp, " ");
}
}
fprintf(fp, "};\n");
fclose(fp);
}
static inline
void genDivRatioTbl_u32()
{
DivRatio32 divRatioTbl[kMaxDivTable];
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
divRatioTbl[n] = preComputeDiv_u32<0>(n);
}
FILE * fp = fopen("div_ratio_tbl32.h", "w");
if (fp == NULL) return;
fprintf(fp, "\n");
fprintf(fp, "static const DivRatio32 div_ratio_tbl32[kMaxDivTable] = {\n");
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
if ((n % 2) == 0) {
fprintf(fp, " ");
}
fprintf(fp, "{ /* %3u */ 0x%08X, 0x%08X, %2u, 0 },",
n,
divRatioTbl[n].mul,
divRatioTbl[n].add,
divRatioTbl[n].shift);
if ((n % 2) == 1) {
fprintf(fp, "\n");
} else {
fprintf(fp, " ");
}
}
fprintf(fp, "};\n");
fclose(fp);
}
static inline
void genDivRatioTbl_u32_64()
{
DivRatio32 divRatioTbl[kMaxDivTable];
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
divRatioTbl[n] = preComputeDiv_u32_64(n);
}
FILE * fp = fopen("div_ratio_tbl32_64.h", "w");
if (fp == NULL) return;
fprintf(fp, "\n");
fprintf(fp, "static const DivRatio32 div_ratio_tbl32_64[kMaxDivTable] = {\n");
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
if ((n % 2) == 0) {
fprintf(fp, " ");
}
fprintf(fp, "{ /* %3u */ 0x%08X, 0x%08X, %2u, 0 },",
n,
divRatioTbl[n].mul,
divRatioTbl[n].add,
divRatioTbl[n].shift);
if ((n % 2) == 1) {
fprintf(fp, "\n");
} else {
fprintf(fp, " ");
}
}
fprintf(fp, "};\n");
fclose(fp);
}
static inline
void genDivRatioTbl_u64()
{
DivRatio64 divRatioTbl[kMaxDivTable];
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
divRatioTbl[n] = preComputeDiv_u64(n);
}
FILE * fp = fopen("div_ratio_tbl64.h", "w");
if (fp == NULL) return;
fprintf(fp, "\n");
fprintf(fp, "static const DivRatio64 div_ratio_tbl64[kMaxDivTable] = {\n");
for (std::uint32_t n = 0; n < kMaxDivTable; n++) {
if ((n % 1) == 0) {
fprintf(fp, " ");
}
fprintf(fp, "{ /* %3u */ 0x%08X%08Xull, 0x%08X%08Xull, %2u, 0 },",
n,
(uint32_t)(divRatioTbl[n].mul >> 32u),
(uint32_t)(divRatioTbl[n].mul & 0xFFFFFFFFul),
(uint32_t)(divRatioTbl[n].add >> 32u),
(uint32_t)(divRatioTbl[n].add & 0xFFFFFFFFul),
divRatioTbl[n].shift);
if ((n % 1) == 0) {
fprintf(fp, "\n");
} else {
fprintf(fp, " ");
}
}
fprintf(fp, "};\n");
fclose(fp);
}
static inline
void genDivRatioTbl()
{
genDivRatioTbl_u32_v1();
genDivRatioTbl_u32_v2();
genDivRatioTbl_u32();
genDivRatioTbl_u32_64();
genDivRatioTbl_u64();
}
static inline
std::uint32_t fast_div_u32_v1(std::uint32_t value, std::uint32_t divisor)
{
if (divisor < kMaxDivTable) {
DivRatio32_v1 rt = div_ratio_tbl32_v1[divisor];
std::uint32_t result = ((std::uint32_t)(((std::uint64_t)value * rt.mul) >> 32u) >> rt.shift);
return result;
} else {
return (value / divisor);
}
}
static inline
std::uint32_t fast_div_u32_v2(std::uint32_t value, std::uint32_t divisor)
{
if (divisor < kMaxDivTable) {
DivRatio32 rt = div_ratio_tbl32_v2[divisor];
std::uint32_t result = ((std::uint32_t)(((std::uint64_t)value * rt.mul + rt.add) >> 32u) >> rt.shift);
return result;
} else {
return (value / divisor);
}
}
#if defined(WIN64) || defined(_WIN64) || defined(_M_X64) || defined(_M_AMD64) \
|| defined(_M_IA64) || defined(__amd64__) || defined(__x86_64__)
static inline
std::uint32_t fast_div_u32(std::uint32_t value, std::uint32_t divisor)
{
if (divisor < kMaxDivTable) {
DivRatio32 rt = div_ratio_tbl32_64[divisor];
std::uint32_t result = (std::uint32_t)(((std::uint64_t)value * rt.mul + rt.add) >> rt.shift);
return result;
} else {
return (value / divisor);
}
}
#else // !__amd64__
static inline
std::uint32_t fast_div_u32(std::uint32_t value, std::uint32_t divisor)
{
if (divisor < kMaxDivTable) {
DivRatio32 rt = div_ratio_tbl32[divisor];
std::uint32_t result = ((std::uint32_t)(((std::uint64_t)value * rt.mul + rt.add) >> 32u) >> rt.shift);
return result;
} else {
return (value / divisor);
}
}
#endif // __amd64__
static inline
std::uint64_t fast_div_u64(std::uint64_t value, std::uint64_t divisor)
{
if (divisor < kMaxDivTable) {
DivRatio64 rt = div_ratio_tbl64[divisor];
std::uint64_t result = (mul_u64x64_high_ex(value, rt.mul) >> rt.shift);
return result;
} else {
return (value / divisor);
}
}
} // namespace jstd
#endif // JSTD_FAST_DIV_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。