Unified · Split
| @@ -0,0 +1,1506 @@ | ||
| 1 | +######################################################################### | |
| 2 | +# Huffman code table for ISO/MPEG Layer 3 Coding # | |
| 3 | +# Syntax: table head: # | |
| 4 | +# .table number xlen ylen linbits # | |
| 5 | +# .referenz referenz table number (if no table data) # | |
| 6 | +# # | |
| 7 | +# table data: # | |
| 8 | +######################################################################### | |
| 9 | + | |
| 10 | +.table 0 0 0 0 | |
| 11 | +#val hlen hcod | |
| 12 | + | |
| 13 | +.table 1 2 2 0 | |
| 14 | +#x y hlen hcod | |
| 15 | + 0 0 1 1 | |
| 16 | + 0 1 3 001 | |
| 17 | + 1 0 2 01 | |
| 18 | + 1 1 3 000 | |
| 19 | + | |
| 20 | +.table 2 3 3 0 | |
| 21 | + 0 0 1 1 | |
| 22 | + 0 1 3 010 | |
| 23 | + 0 2 6 000001 | |
| 24 | + 1 0 3 011 | |
| 25 | + 1 1 3 001 | |
| 26 | + 1 2 5 00001 | |
| 27 | + 2 0 5 00011 | |
| 28 | + 2 1 5 00010 | |
| 29 | + 2 2 6 000000 | |
| 30 | + | |
| 31 | +.table 3 3 3 0 | |
| 32 | + 0 0 2 11 | |
| 33 | + 0 1 2 10 | |
| 34 | + 0 2 6 000001 | |
| 35 | + 1 0 3 001 | |
| 36 | + 1 1 2 01 | |
| 37 | + 1 2 5 00001 | |
| 38 | + 2 0 5 00011 | |
| 39 | + 2 1 5 00010 | |
| 40 | + 2 2 6 000000 | |
| 41 | + | |
| 42 | +.table 4 0 0 0 | |
| 43 | +#not usedwanz | |
| 44 | + | |
| 45 | +.table 5 4 4 0 | |
| 46 | + 0 0 1 1 | |
| 47 | + 0 1 3 010 | |
| 48 | + 0 2 6 000110 | |
| 49 | + 0 3 7 0000101 | |
| 50 | + 1 0 3 011 | |
| 51 | + 1 1 3 001 | |
| 52 | + 1 2 6 000100 | |
| 53 | + 1 3 7 0000100 | |
| 54 | + 2 0 6 000111 | |
| 55 | + 2 1 6 000101 | |
| 56 | + 2 2 7 0000111 | |
| 57 | + 2 3 8 00000001 | |
| 58 | + 3 0 7 0000110 | |
| 59 | + 3 1 6 000001 | |
| 60 | + 3 2 7 0000001 | |
| 61 | + 3 3 8 00000000 | |
| 62 | + | |
| 63 | +.table 6 4 4 0 | |
| 64 | + 0 0 3 111 | |
| 65 | + 0 1 3 011 | |
| 66 | + 0 2 5 00101 | |
| 67 | + 0 3 7 0000001 | |
| 68 | + 1 0 3 110 | |
| 69 | + 1 1 2 10 | |
| 70 | + 1 2 4 0011 | |
| 71 | + 1 3 5 00010 | |
| 72 | + 2 0 4 0101 | |
| 73 | + 2 1 4 0100 | |
| 74 | + 2 2 5 00100 | |
| 75 | + 2 3 6 000001 | |
| 76 | + 3 0 6 000011 | |
| 77 | + 3 1 5 00011 | |
| 78 | + 3 2 6 000010 | |
| 79 | + 3 3 7 0000000 | |
| 80 | + | |
| 81 | +.table 7 6 6 0 | |
| 82 | + 0 0 1 1 | |
| 83 | + 0 1 3 010 | |
| 84 | + 0 2 6 001010 | |
| 85 | + 0 3 8 00010011 | |
| 86 | + 0 4 8 00010000 | |
| 87 | + 0 5 9 000001010 | |
| 88 | + 1 0 3 011 | |
| 89 | + 1 1 4 0011 | |
| 90 | + 1 2 6 000111 | |
| 91 | + 1 3 7 0001010 | |
| 92 | + 1 4 7 0000101 | |
| 93 | + 1 5 8 00000011 | |
| 94 | + 2 0 6 001011 | |
| 95 | + 2 1 5 00100 | |
| 96 | + 2 2 7 0001101 | |
| 97 | + 2 3 8 00010001 | |
| 98 | + 2 4 8 00001000 | |
| 99 | + 2 5 9 000000100 | |
| 100 | + 3 0 7 0001100 | |
| 101 | + 3 1 7 0001011 | |
| 102 | + 3 2 8 00010010 | |
| 103 | + 3 3 9 000001111 | |
| 104 | + 3 4 9 000001011 | |
| 105 | + 3 5 9 000000010 | |
| 106 | + 4 0 7 0000111 | |
| 107 | + 4 1 7 0000110 | |
| 108 | + 4 2 8 00001001 | |
| 109 | + 4 3 9 000001110 | |
| 110 | + 4 4 9 000000011 | |
| 111 | + 4 5 10 0000000001 | |
| 112 | + 5 0 8 00000110 | |
| 113 | + 5 1 8 00000100 | |
| 114 | + 5 2 9 000000101 | |
| 115 | + 5 3 10 0000000011 | |
| 116 | + 5 4 10 0000000010 | |
| 117 | + 5 5 10 0000000000 | |
| 118 | + | |
| 119 | +.table 8 6 6 0 | |
| 120 | + 0 0 2 11 | |
| 121 | + 0 1 3 100 | |
| 122 | + 0 2 6 000110 | |
| 123 | + 0 3 8 00010010 | |
| 124 | + 0 4 8 00001100 | |
| 125 | + 0 5 9 000000101 | |
| 126 | + 1 0 3 101 | |
| 127 | + 1 1 2 01 | |
| 128 | + 1 2 4 0010 | |
| 129 | + 1 3 8 00010000 | |
| 130 | + 1 4 8 00001001 | |
| 131 | + 1 5 8 00000011 | |
| 132 | + 2 0 6 000111 | |
| 133 | + 2 1 4 0011 | |
| 134 | + 2 2 6 000101 | |
| 135 | + 2 3 8 00001110 | |
| 136 | + 2 4 8 00000111 | |
| 137 | + 2 5 9 000000011 | |
| 138 | + 3 0 8 00010011 | |
| 139 | + 3 1 8 00010001 | |
| 140 | + 3 2 8 00001111 | |
| 141 | + 3 3 9 000001101 | |
| 142 | + 3 4 9 000001010 | |
| 143 | + 3 5 10 0000000100 | |
| 144 | + 4 0 8 00001101 | |
| 145 | + 4 1 7 0000101 | |
| 146 | + 4 2 8 00001000 | |
| 147 | + 4 3 9 000001011 | |
| 148 | + 4 4 10 0000000101 | |
| 149 | + 4 5 10 0000000001 | |
| 150 | + 5 0 9 000001100 | |
| 151 | + 5 1 8 00000100 | |
| 152 | + 5 2 9 000000100 | |
| 153 | + 5 3 9 000000001 | |
| 154 | + 5 4 11 00000000001 | |
| 155 | + 5 5 11 00000000000 | |
| 156 | + | |
| 157 | +.table 9 6 6 0 | |
| 158 | + 0 0 3 111 | |
| 159 | + 0 1 3 101 | |
| 160 | + 0 2 5 01001 | |
| 161 | + 0 3 6 001110 | |
| 162 | + 0 4 8 00001111 | |
| 163 | + 0 5 9 000000111 | |
| 164 | + 1 0 3 110 | |
| 165 | + 1 1 3 100 | |
| 166 | + 1 2 4 0101 | |
| 167 | + 1 3 5 00101 | |
| 168 | + 1 4 6 000110 | |
| 169 | + 1 5 8 00000111 | |
| 170 | + 2 0 4 0111 | |
| 171 | + 2 1 4 0110 | |
| 172 | + 2 2 5 01000 | |
| 173 | + 2 3 6 001000 | |
| 174 | + 2 4 7 0001000 | |
| 175 | + 2 5 8 00000101 | |
| 176 | + 3 0 6 001111 | |
| 177 | + 3 1 5 00110 | |
| 178 | + 3 2 6 001001 | |
| 179 | + 3 3 7 0001010 | |
| 180 | + 3 4 7 0000101 | |
| 181 | + 3 5 8 00000001 | |
| 182 | + 4 0 7 0001011 | |
| 183 | + 4 1 6 000111 | |
| 184 | + 4 2 7 0001001 | |
| 185 | + 4 3 7 0000110 | |
| 186 | + 4 4 8 00000100 | |
| 187 | + 4 5 9 000000001 | |
| 188 | + 5 0 8 00001110 | |
| 189 | + 5 1 7 0000100 | |
| 190 | + 5 2 8 00000110 | |
| 191 | + 5 3 8 00000010 | |
| 192 | + 5 4 9 000000110 | |
| 193 | + 5 5 9 000000000 | |
| 194 | + | |
| 195 | +.table 10 8 8 0 | |
| 196 | + 0 0 1 1 | |
| 197 | + 0 1 3 010 | |
| 198 | + 0 2 6 001010 | |
| 199 | + 0 3 8 00010111 | |
| 200 | + 0 4 9 000100011 | |
| 201 | + 0 5 9 000011110 | |
| 202 | + 0 6 9 000001100 | |
| 203 | + 0 7 10 0000010001 | |
| 204 | + 1 0 3 011 | |
| 205 | + 1 1 4 0011 | |
| 206 | + 1 2 6 001000 | |
| 207 | + 1 3 7 0001100 | |
| 208 | + 1 4 8 00010010 | |
| 209 | + 1 5 9 000010101 | |
| 210 | + 1 6 8 00001100 | |
| 211 | + 1 7 8 00000111 | |
| 212 | + 2 0 6 001011 | |
| 213 | + 2 1 6 001001 | |
| 214 | + 2 2 7 0001111 | |
| 215 | + 2 3 8 00010101 | |
| 216 | + 2 4 9 000100000 | |
| 217 | + 2 5 10 0000101000 | |
| 218 | + 2 6 9 000010011 | |
| 219 | + 2 7 9 000000110 | |
| 220 | + 3 0 7 0001110 | |
| 221 | + 3 1 7 0001101 | |
| 222 | + 3 2 8 00010110 | |
| 223 | + 3 3 9 000100010 | |
| 224 | + 3 4 10 0000101110 | |
| 225 | + 3 5 10 0000010111 | |
| 226 | + 3 6 9 000010010 | |
| 227 | + 3 7 10 0000000111 | |
| 228 | + 4 0 8 00010100 | |
| 229 | + 4 1 8 00010011 | |
| 230 | + 4 2 9 000100001 | |
| 231 | + 4 3 10 0000101111 | |
| 232 | + 4 4 10 0000011011 | |
| 233 | + 4 5 10 0000010110 | |
| 234 | + 4 6 10 0000001001 | |
| 235 | + 4 7 10 0000000011 | |
| 236 | + 5 0 9 000011111 | |
| 237 | + 5 1 9 000010110 | |
| 238 | + 5 2 10 0000101001 | |
| 239 | + 5 3 10 0000011010 | |
| 240 | + 5 4 11 00000010101 | |
| 241 | + 5 5 11 00000010100 | |
| 242 | + 5 6 10 0000000101 | |
| 243 | + 5 7 11 00000000011 | |
| 244 | + 6 0 8 00001110 | |
| 245 | + 6 1 8 00001101 | |
| 246 | + 6 2 9 000001010 | |
| 247 | + 6 3 10 0000001011 | |
| 248 | + 6 4 10 0000010000 | |
| 249 | + 6 5 10 0000000110 | |
| 250 | + 6 6 11 00000000101 | |
| 251 | + 6 7 11 00000000001 | |
| 252 | + 7 0 9 000001001 | |
| 253 | + 7 1 8 00001000 | |
| 254 | + 7 2 9 000000111 | |
| 255 | + 7 3 10 0000001000 | |
| 256 | + 7 4 10 0000000100 | |
| 257 | + 7 5 11 00000000100 | |
| 258 | + 7 6 11 00000000010 | |
| 259 | + 7 7 11 00000000000 | |
| 260 | + | |
| 261 | +.table 11 8 8 0 | |
| 262 | + 0 0 2 11 | |
| 263 | + 0 1 3 100 | |
| 264 | + 0 2 5 01010 | |
| 265 | + 0 3 7 0011000 | |
| 266 | + 0 4 8 00100010 | |
| 267 | + 0 5 9 000100001 | |
| 268 | + 0 6 8 00010101 | |
| 269 | + 0 7 9 000001111 | |
| 270 | + 1 0 3 101 | |
| 271 | + 1 1 3 011 | |
| 272 | + 1 2 4 0100 | |
| 273 | + 1 3 6 001010 | |
| 274 | + 1 4 8 00100000 | |
| 275 | + 1 5 8 00010001 | |
| 276 | + 1 6 7 0001011 | |
| 277 | + 1 7 8 00001010 | |
| 278 | + 2 0 5 01011 | |
| 279 | + 2 1 5 00111 | |
| 280 | + 2 2 6 001101 | |
| 281 | + 2 3 7 0010010 | |
| 282 | + 2 4 8 00011110 | |
| 283 | + 2 5 9 000011111 | |
| 284 | + 2 6 8 00010100 | |
| 285 | + 2 7 8 00000101 | |
| 286 | + 3 0 7 0011001 | |
| 287 | + 3 1 6 001011 | |
| 288 | + 3 2 7 0010011 | |
| 289 | + 3 3 9 000111011 | |
| 290 | + 3 4 8 00011011 | |
| 291 | + 3 5 10 0000010010 | |
| 292 | + 3 6 8 00001100 | |
| 293 | + 3 7 9 000000101 | |
| 294 | + 4 0 8 00100011 | |
| 295 | + 4 1 8 00100001 | |
| 296 | + 4 2 8 00011111 | |
| 297 | + 4 3 9 000111010 | |
| 298 | + 4 4 9 000011110 | |
| 299 | + 4 5 10 0000010000 | |
| 300 | + 4 6 9 000000111 | |
| 301 | + 4 7 10 0000000101 | |
| 302 | + 5 0 8 00011100 | |
| 303 | + 5 1 8 00011010 | |
| 304 | + 5 2 9 000100000 | |
| 305 | + 5 3 10 0000010011 | |
| 306 | + 5 4 10 0000010001 | |
| 307 | + 5 5 11 00000001111 | |
| 308 | + 5 6 10 0000001000 | |
| 309 | + 5 7 11 00000001110 | |
| 310 | + 6 0 8 00001110 | |
| 311 | + 6 1 7 0001100 | |
| 312 | + 6 2 7 0001001 | |
| 313 | + 6 3 8 00001101 | |
| 314 | + 6 4 9 000001110 | |
| 315 | + 6 5 10 0000001001 | |
| 316 | + 6 6 10 0000000100 | |
| 317 | + 6 7 10 0000000001 | |
| 318 | + 7 0 8 00001011 | |
| 319 | + 7 1 7 0000100 | |
| 320 | + 7 2 8 00000110 | |
| 321 | + 7 3 9 000000110 | |
| 322 | + 7 4 10 0000000110 | |
| 323 | + 7 5 10 0000000011 | |
| 324 | + 7 6 10 0000000010 | |
| 325 | + 7 7 10 0000000000 | |
| 326 | + | |
| 327 | +.table 12 8 8 0 | |
| 328 | + 0 0 4 1001 | |
| 329 | + 0 1 3 110 | |
| 330 | + 0 2 5 10000 | |
| 331 | + 0 3 7 0100001 | |
| 332 | + 0 4 8 00101001 | |
| 333 | + 0 5 9 000100111 | |
| 334 | + 0 6 9 000100110 | |
| 335 | + 0 7 9 000011010 | |
| 336 | + 1 0 3 111 | |
| 337 | + 1 1 3 101 | |
| 338 | + 1 2 4 0110 | |
| 339 | + 1 3 5 01001 | |
| 340 | + 1 4 7 0010111 | |
| 341 | + 1 5 7 0010000 | |
| 342 | + 1 6 8 00011010 | |
| 343 | + 1 7 8 00001011 | |
| 344 | + 2 0 5 10001 | |
| 345 | + 2 1 4 0111 | |
| 346 | + 2 2 5 01011 | |
| 347 | + 2 3 6 001110 | |
| 348 | + 2 4 7 0010101 | |
| 349 | + 2 5 8 00011110 | |
| 350 | + 2 6 7 0001010 | |
| 351 | + 2 7 8 00000111 | |
| 352 | + 3 0 6 010001 | |
| 353 | + 3 1 5 01010 | |
| 354 | + 3 2 6 001111 | |
| 355 | + 3 3 6 001100 | |
| 356 | + 3 4 7 0010010 | |
| 357 | + 3 5 8 00011100 | |
| 358 | + 3 6 8 00001110 | |
| 359 | + 3 7 8 00000101 | |
| 360 | + 4 0 7 0100000 | |
| 361 | + 4 1 6 001101 | |
| 362 | + 4 2 7 0010110 | |
| 363 | + 4 3 7 0010011 | |
| 364 | + 4 4 8 00010010 | |
| 365 | + 4 5 8 00010000 | |
| 366 | + 4 6 8 00001001 | |
| 367 | + 4 7 9 000000101 | |
| 368 | + 5 0 8 00101000 | |
| 369 | + 5 1 7 0010001 | |
| 370 | + 5 2 8 00011111 | |
| 371 | + 5 3 8 00011101 | |
| 372 | + 5 4 8 00010001 | |
| 373 | + 5 5 9 000001101 | |
| 374 | + 5 6 8 00000100 | |
| 375 | + 5 7 9 000000010 | |
| 376 | + 6 0 8 00011011 | |
| 377 | + 6 1 7 0001100 | |
| 378 | + 6 2 7 0001011 | |
| 379 | + 6 3 8 00001111 | |
| 380 | + 6 4 8 00001010 | |
| 381 | + 6 5 9 000000111 | |
| 382 | + 6 6 9 000000100 | |
| 383 | + 6 7 10 0000000001 | |
| 384 | + 7 0 9 000011011 | |
| 385 | + 7 1 8 00001100 | |
| 386 | + 7 2 8 00001000 | |
| 387 | + 7 3 9 000001100 | |
| 388 | + 7 4 9 000000110 | |
| 389 | + 7 5 9 000000011 | |
| 390 | + 7 6 9 000000001 | |
| 391 | + 7 7 10 0000000000 | |
| 392 | + | |
| 393 | +.table 13 16 16 0 | |
| 394 | + 0 0 1 1 | |
| 395 | + 0 1 4 0101 | |
| 396 | + 0 2 6 001110 | |
| 397 | + 0 3 7 0010101 | |
| 398 | + 0 4 8 00100010 | |
| 399 | + 0 5 9 000110011 | |
| 400 | + 0 6 9 000101110 | |
| 401 | + 0 7 10 0001000111 | |
| 402 | + 0 8 9 000101010 | |
| 403 | + 0 9 10 0000110100 | |
| 404 | + 0 10 11 00001000100 | |
| 405 | + 0 11 11 00000110100 | |
| 406 | + 0 12 12 000001000011 | |
| 407 | + 0 13 12 000000101100 | |
| 408 | + 0 14 13 0000000101011 | |
| 409 | + 0 15 13 0000000010011 | |
| 410 | + 1 0 3 011 | |
| 411 | + 1 1 4 0100 | |
| 412 | + 1 2 6 001100 | |
| 413 | + 1 3 7 0010011 | |
| 414 | + 1 4 8 00011111 | |
| 415 | + 1 5 8 00011010 | |
| 416 | + 1 6 9 000101100 | |
| 417 | + 1 7 9 000100001 | |
| 418 | + 1 8 9 000011111 | |
| 419 | + 1 9 9 000011000 | |
| 420 | + 1 10 10 0000100000 | |
| 421 | + 1 11 10 0000011000 | |
| 422 | + 1 12 11 00000011111 | |
| 423 | + 1 13 12 000000100011 | |
| 424 | + 1 14 12 000000010110 | |
| 425 | + 1 15 12 000000001110 | |
| 426 | + 2 0 6 001111 | |
| 427 | + 2 1 6 001101 | |
| 428 | + 2 2 7 0010111 | |
| 429 | + 2 3 8 00100100 | |
| 430 | + 2 4 9 000111011 | |
| 431 | + 2 5 9 000110001 | |
| 432 | + 2 6 10 0001001101 | |
| 433 | + 2 7 10 0001000001 | |
| 434 | + 2 8 9 000011101 | |
| 435 | + 2 9 10 0000101000 | |
| 436 | + 2 10 10 0000011110 | |
| 437 | + 2 11 11 00000101000 | |
| 438 | + 2 12 11 00000011011 | |
| 439 | + 2 13 12 000000100001 | |
| 440 | + 2 14 13 0000000101010 | |
| 441 | + 2 15 13 0000000010000 | |
| 442 | + 3 0 7 0010110 | |
| 443 | + 3 1 7 0010100 | |
| 444 | + 3 2 8 00100101 | |
| 445 | + 3 3 9 000111101 | |
| 446 | + 3 4 9 000111000 | |
| 447 | + 3 5 10 0001001111 | |
| 448 | + 3 6 10 0001001001 | |
| 449 | + 3 7 10 0001000000 | |
| 450 | + 3 8 10 0000101011 | |
| 451 | + 3 9 11 00001001100 | |
| 452 | + 3 10 11 00000111000 | |
| 453 | + 3 11 11 00000100101 | |
| 454 | + 3 12 11 00000011010 | |
| 455 | + 3 13 12 000000011111 | |
| 456 | + 3 14 13 0000000011001 | |
| 457 | + 3 15 13 0000000001110 | |
| 458 | + 4 0 8 00100011 | |
| 459 | + 4 1 7 0010000 | |
| 460 | + 4 2 9 000111100 | |
| 461 | + 4 3 9 000111001 | |
| 462 | + 4 4 10 0001100001 | |
| 463 | + 4 5 10 0001001011 | |
| 464 | + 4 6 11 00001110010 | |
| 465 | + 4 7 11 00001011011 | |
| 466 | + 4 8 10 0000110110 | |
| 467 | + 4 9 11 00001001001 | |
| 468 | + 4 10 11 00000110111 | |
| 469 | + 4 11 12 000000101001 | |
| 470 | + 4 12 12 000000110000 | |
| 471 | + 4 13 13 0000000110101 | |
| 472 | + 4 14 13 0000000010111 | |
| 473 | + 4 15 14 00000000011000 | |
| 474 | + 5 0 9 000111010 | |
| 475 | + 5 1 8 00011011 | |
| 476 | + 5 2 9 000110010 | |
| 477 | + 5 3 10 0001100000 | |
| 478 | + 5 4 10 0001001100 | |
| 479 | + 5 5 10 0001000110 | |
| 480 | + 5 6 11 00001011101 | |
| 481 | + 5 7 11 00001010100 | |
| 482 | + 5 8 11 00001001101 | |
| 483 | + 5 9 11 00000111010 | |
| 484 | + 5 10 12 000001001111 | |
| 485 | + 5 11 11 00000011101 | |
| 486 | + 5 12 13 0000001001010 | |
| 487 | + 5 13 13 0000000110001 | |
| 488 | + 5 14 14 00000000101001 | |
| 489 | + 5 15 14 00000000010001 | |
| 490 | + 6 0 9 000101111 | |
| 491 | + 6 1 9 000101101 | |
| 492 | + 6 2 10 0001001110 | |
| 493 | + 6 3 10 0001001010 | |
| 494 | + 6 4 11 00001110011 | |
| 495 | + 6 5 11 00001011110 | |
| 496 | + 6 6 11 00001011010 | |
| 497 | + 6 7 11 00001001111 | |
| 498 | + 6 8 11 00001000101 | |
| 499 | + 6 9 12 000001010011 | |
| 500 | + 6 10 12 000001000111 | |
| 501 | + 6 11 12 000000110010 | |
| 502 | + 6 12 13 0000000111011 | |
| 503 | + 6 13 13 0000000100110 | |
| 504 | + 6 14 14 00000000100100 | |
| 505 | + 6 15 14 00000000001111 | |
| 506 | + 7 0 10 0001001000 | |
| 507 | + 7 1 9 000100010 | |
| 508 | + 7 2 10 0000111000 | |
| 509 | + 7 3 11 00001011111 | |
| 510 | + 7 4 11 00001011100 | |
| 511 | + 7 5 11 00001010101 | |
| 512 | + 7 6 12 000001011011 | |
| 513 | + 7 7 12 000001011010 | |
| 514 | + 7 8 12 000001010110 | |
| 515 | + 7 9 12 000001001001 | |
| 516 | + 7 10 13 0000001001101 | |
| 517 | + 7 11 13 0000001000001 | |
| 518 | + 7 12 13 0000000110011 | |
| 519 | + 7 13 14 00000000101100 | |
| 520 | + 7 14 16 0000000000101011 | |
| 521 | + 7 15 16 0000000000101010 | |
| 522 | + 8 0 9 000101011 | |
| 523 | + 8 1 8 00010100 | |
| 524 | + 8 2 9 000011110 | |
| 525 | + 8 3 10 0000101100 | |
| 526 | + 8 4 10 0000110111 | |
| 527 | + 8 5 11 00001001110 | |
| 528 | + 8 6 11 00001001000 | |
| 529 | + 8 7 12 000001010111 | |
| 530 | + 8 8 12 000001001110 | |
| 531 | + 8 9 12 000000111101 | |
| 532 | + 8 10 12 000000101110 | |
| 533 | + 8 11 13 0000000110110 | |
| 534 | + 8 12 13 0000000100101 | |
| 535 | + 8 13 14 00000000011110 | |
| 536 | + 8 14 15 000000000010100 | |
| 537 | + 8 15 15 000000000010000 | |
| 538 | + 9 0 10 0000110101 | |
| 539 | + 9 1 9 000011001 | |
| 540 | + 9 2 10 0000101001 | |
| 541 | + 9 3 10 0000100101 | |
| 542 | + 9 4 11 00000101100 | |
| 543 | + 9 5 11 00000111011 | |
| 544 | + 9 6 11 00000110110 | |
| 545 | + 9 7 13 0000001010001 | |
| 546 | + 9 8 12 000001000010 | |
| 547 | + 9 9 13 0000001001100 | |
| 548 | + 9 10 13 0000000111001 | |
| 549 | + 9 11 14 00000000110110 | |
| 550 | + 9 12 14 00000000100101 | |
| 551 | + 9 13 14 00000000010010 | |
| 552 | + 9 14 16 0000000000100111 | |
| 553 | + 9 15 15 000000000001011 | |
| 554 | +10 0 10 0000100011 | |
| 555 | +10 1 10 0000100001 | |
| 556 | +10 2 10 0000011111 | |
| 557 | +10 3 11 00000111001 | |
| 558 | +10 4 11 00000101010 | |
| 559 | +10 5 12 000001010010 | |
| 560 | +10 6 12 000001001000 | |
| 561 | +10 7 13 0000001010000 | |
| 562 | +10 8 12 000000101111 | |
| 563 | +10 9 13 0000000111010 | |
| 564 | +10 10 14 00000000110111 | |
| 565 | +10 11 13 0000000010101 | |
| 566 | +10 12 14 00000000010110 | |
| 567 | +10 13 15 000000000011010 | |
| 568 | +10 14 16 0000000000100110 | |
| 569 | +10 15 17 00000000000010110 | |
| 570 | +11 0 11 00000110101 | |
| 571 | +11 1 10 0000011001 | |
| 572 | +11 2 10 0000010111 | |
| 573 | +11 3 11 00000100110 | |
| 574 | +11 4 12 000001000110 | |
| 575 | +11 5 12 000000111100 | |
| 576 | +11 6 12 000000110011 | |
| 577 | +11 7 12 000000100100 | |
| 578 | +11 8 13 0000000110111 | |
| 579 | +11 9 13 0000000011010 | |
| 580 | +11 10 13 0000000100010 | |
| 581 | +11 11 14 00000000010111 | |
| 582 | +11 12 15 000000000011011 | |
| 583 | +11 13 15 000000000001110 | |
| 584 | +11 14 15 000000000001001 | |
| 585 | +11 15 16 0000000000000111 | |
| 586 | +12 0 11 00000100010 | |
| 587 | +12 1 11 00000100000 | |
| 588 | +12 2 11 00000011100 | |
| 589 | +12 3 12 000000100111 | |
| 590 | +12 4 12 000000110001 | |
| 591 | +12 5 13 0000001001011 | |
| 592 | +12 6 12 000000011110 | |
| 593 | +12 7 13 0000000110100 | |
| 594 | +12 8 14 00000000110000 | |
| 595 | +12 9 14 00000000101000 | |
| 596 | +12 10 15 000000000110100 | |
| 597 | +12 11 15 000000000011100 | |
| 598 | +12 12 15 000000000010010 | |
| 599 | +12 13 16 0000000000010001 | |
| 600 | +12 14 16 0000000000001001 | |
| 601 | +12 15 16 0000000000000101 | |
| 602 | +13 0 12 000000101101 | |
| 603 | +13 1 11 00000010101 | |
| 604 | +13 2 12 000000100010 | |
| 605 | +13 3 13 0000001000000 | |
| 606 | +13 4 13 0000000111000 | |
| 607 | +13 5 13 0000000110010 | |
| 608 | +13 6 14 00000000110001 | |
| 609 | +13 7 14 00000000101101 | |
| 610 | +13 8 14 00000000011111 | |
| 611 | +13 9 14 00000000010011 | |
| 612 | +13 10 14 00000000001100 | |
| 613 | +13 11 15 000000000001111 | |
| 614 | +13 12 16 0000000000001010 | |
| 615 | +13 13 15 000000000000111 | |
| 616 | +13 14 16 0000000000000110 | |
| 617 | +13 15 16 0000000000000011 | |
| 618 | +14 0 13 0000000110000 | |
| 619 | +14 1 12 000000010111 | |
| 620 | +14 2 12 000000010100 | |
| 621 | +14 3 13 0000000100111 | |
| 622 | +14 4 13 0000000100100 | |
| 623 | +14 5 13 0000000100011 | |
| 624 | +14 6 15 000000000110101 | |
| 625 | +14 7 14 00000000010101 | |
| 626 | +14 8 14 00000000010000 | |
| 627 | +14 9 17 00000000000010111 | |
| 628 | +14 10 15 000000000001101 | |
| 629 | +14 11 15 000000000001010 | |
| 630 | +14 12 15 000000000000110 | |
| 631 | +14 13 17 00000000000000001 | |
| 632 | +14 14 16 0000000000000100 | |
| 633 | +14 15 16 0000000000000010 | |
| 634 | +15 0 12 000000010000 | |
| 635 | +15 1 12 000000001111 | |
| 636 | +15 2 13 0000000010001 | |
| 637 | +15 3 14 00000000011011 | |
| 638 | +15 4 14 00000000011001 | |
| 639 | +15 5 14 00000000010100 | |
| 640 | +15 6 15 000000000011101 | |
| 641 | +15 7 14 00000000001011 | |
| 642 | +15 8 15 000000000010001 | |
| 643 | +15 9 15 000000000001100 | |
| 644 | +15 10 16 0000000000010000 | |
| 645 | +15 11 16 0000000000001000 | |
| 646 | +15 12 19 0000000000000000001 | |
| 647 | +15 13 18 000000000000000001 | |
| 648 | +15 14 19 0000000000000000000 | |
| 649 | +15 15 16 0000000000000001 | |
| 650 | + | |
| 651 | +.table 14 0 0 0 | |
| 652 | +#not used | |
| 653 | + | |
| 654 | +.table 15 16 16 0 | |
| 655 | + 0 0 3 111 | |
| 656 | + 0 1 4 1100 | |
| 657 | + 0 2 5 10010 | |
| 658 | + 0 3 7 0110101 | |
| 659 | + 0 4 7 0101111 | |
| 660 | + 0 5 8 01001100 | |
| 661 | + 0 6 9 001111100 | |
| 662 | + 0 7 9 001101100 | |
| 663 | + 0 8 9 001011001 | |
| 664 | + 0 9 10 0001111011 | |
| 665 | + 0 10 10 0001101100 | |
| 666 | + 0 11 11 00001110111 | |
| 667 | + 0 12 11 00001101011 | |
| 668 | + 0 13 11 00001010001 | |
| 669 | + 0 14 12 000001111010 | |
| 670 | + 0 15 13 0000000111111 | |
| 671 | + 1 0 4 1101 | |
| 672 | + 1 1 3 101 | |
| 673 | + 1 2 5 10000 | |
| 674 | + 1 3 6 011011 | |
| 675 | + 1 4 7 0101110 | |
| 676 | + 1 5 7 0100100 | |
| 677 | + 1 6 8 00111101 | |
| 678 | + 1 7 8 00110011 | |
| 679 | + 1 8 8 00101010 | |
| 680 | + 1 9 9 001000110 | |
| 681 | + 1 10 9 000110100 | |
| 682 | + 1 11 10 0001010011 | |
| 683 | + 1 12 10 0001000001 | |
| 684 | + 1 13 10 0000101001 | |
| 685 | + 1 14 11 00000111011 | |
| 686 | + 1 15 11 00000100100 | |
| 687 | + 2 0 5 10011 | |
| 688 | + 2 1 5 10001 | |
| 689 | + 2 2 5 01111 | |
| 690 | + 2 3 6 011000 | |
| 691 | + 2 4 7 0101001 | |
| 692 | + 2 5 7 0100010 | |
| 693 | + 2 6 8 00111011 | |
| 694 | + 2 7 8 00110000 | |
| 695 | + 2 8 8 00101000 | |
| 696 | + 2 9 9 001000000 | |
| 697 | + 2 10 9 000110010 | |
| 698 | + 2 11 10 0001001110 | |
| 699 | + 2 12 10 0000111110 | |
| 700 | + 2 13 11 00001010000 | |
| 701 | + 2 14 11 00000111000 | |
| 702 | + 2 15 11 00000100001 | |
| 703 | + 3 0 6 011101 | |
| 704 | + 3 1 6 011100 | |
| 705 | + 3 2 6 011001 | |
| 706 | + 3 3 7 0101011 | |
| 707 | + 3 4 7 0100111 | |
| 708 | + 3 5 8 00111111 | |
| 709 | + 3 6 8 00110111 | |
| 710 | + 3 7 9 001011101 | |
| 711 | + 3 8 9 001001100 | |
| 712 | + 3 9 9 000111011 | |
| 713 | + 3 10 10 0001011101 | |
| 714 | + 3 11 10 0001001000 | |
| 715 | + 3 12 10 0000110110 | |
| 716 | + 3 13 11 00001001011 | |
| 717 | + 3 14 11 00000110010 | |
| 718 | + 3 15 11 00000011101 | |
| 719 | + 4 0 7 0110100 | |
| 720 | + 4 1 6 010110 | |
| 721 | + 4 2 7 0101010 | |
| 722 | + 4 3 7 0101000 | |
| 723 | + 4 4 8 01000011 | |
| 724 | + 4 5 8 00111001 | |
| 725 | + 4 6 9 001011111 | |
| 726 | + 4 7 9 001001111 | |
| 727 | + 4 8 9 001001000 | |
| 728 | + 4 9 9 000111001 | |
| 729 | + 4 10 10 0001011001 | |
| 730 | + 4 11 10 0001000101 | |
| 731 | + 4 12 10 0000110001 | |
| 732 | + 4 13 11 00001000010 | |
| 733 | + 4 14 11 00000101110 | |
| 734 | + 4 15 11 00000011011 | |
| 735 | + 5 0 8 01001101 | |
| 736 | + 5 1 7 0100101 | |
| 737 | + 5 2 7 0100011 | |
| 738 | + 5 3 8 01000010 | |
| 739 | + 5 4 8 00111010 | |
| 740 | + 5 5 8 00110100 | |
| 741 | + 5 6 9 001011011 | |
| 742 | + 5 7 9 001001010 | |
| 743 | + 5 8 9 000111110 | |
| 744 | + 5 9 9 000110000 | |
| 745 | + 5 10 10 0001001111 | |
| 746 | + 5 11 10 0000111111 | |
| 747 | + 5 12 11 00001011010 | |
| 748 | + 5 13 11 00000111110 | |
| 749 | + 5 14 11 00000101000 | |
| 750 | + 5 15 12 000000100110 | |
| 751 | + 6 0 9 001111101 | |
| 752 | + 6 1 7 0100000 | |
| 753 | + 6 2 8 00111100 | |
| 754 | + 6 3 8 00111000 | |
| 755 | + 6 4 8 00110010 | |
| 756 | + 6 5 9 001011100 | |
| 757 | + 6 6 9 001001110 | |
| 758 | + 6 7 9 001000001 | |
| 759 | + 6 8 9 000110111 | |
| 760 | + 6 9 10 0001010111 | |
| 761 | + 6 10 10 0001000111 | |
| 762 | + 6 11 10 0000110011 | |
| 763 | + 6 12 11 00001001001 | |
| 764 | + 6 13 11 00000110011 | |
| 765 | + 6 14 12 000001000110 | |
| 766 | + 6 15 12 000000011110 | |
| 767 | + 7 0 9 001101101 | |
| 768 | + 7 1 8 00110101 | |
| 769 | + 7 2 8 00110001 | |
| 770 | + 7 3 9 001011110 | |
| 771 | + 7 4 9 001011000 | |
| 772 | + 7 5 9 001001011 | |
| 773 | + 7 6 9 001000010 | |
| 774 | + 7 7 10 0001111010 | |
| 775 | + 7 8 10 0001011011 | |
| 776 | + 7 9 10 0001001001 | |
| 777 | + 7 10 10 0000111000 | |
| 778 | + 7 11 10 0000101010 | |
| 779 | + 7 12 11 00001000000 | |
| 780 | + 7 13 11 00000101100 | |
| 781 | + 7 14 11 00000010101 | |
| 782 | + 7 15 12 000000011001 | |
| 783 | + 8 0 9 001011010 | |
| 784 | + 8 1 8 00101011 | |
| 785 | + 8 2 8 00101001 | |
| 786 | + 8 3 9 001001101 | |
| 787 | + 8 4 9 001001001 | |
| 788 | + 8 5 9 000111111 | |
| 789 | + 8 6 9 000111000 | |
| 790 | + 8 7 10 0001011100 | |
| 791 | + 8 8 10 0001001101 | |
| 792 | + 8 9 10 0001000010 | |
| 793 | + 8 10 10 0000101111 | |
| 794 | + 8 11 11 00001000011 | |
| 795 | + 8 12 11 00000110000 | |
| 796 | + 8 13 12 000000110101 | |
| 797 | + 8 14 12 000000100100 | |
| 798 | + 8 15 12 000000010100 | |
| 799 | + 9 0 9 001000111 | |
| 800 | + 9 1 8 00100010 | |
| 801 | + 9 2 9 001000011 | |
| 802 | + 9 3 9 000111100 | |
| 803 | + 9 4 9 000111010 | |
| 804 | + 9 5 9 000110001 | |
| 805 | + 9 6 10 0001011000 | |
| 806 | + 9 7 10 0001001100 | |
| 807 | + 9 8 10 0001000011 | |
| 808 | + 9 9 11 00001101010 | |
| 809 | + 9 10 11 00001000111 | |
| 810 | + 9 11 11 00000110110 | |
| 811 | + 9 12 11 00000100110 | |
| 812 | + 9 13 12 000000100111 | |
| 813 | + 9 14 12 000000010111 | |
| 814 | + 9 15 12 000000001111 | |
| 815 | +10 0 10 0001101101 | |
| 816 | +10 1 9 000110101 | |
| 817 | +10 2 9 000110011 | |
| 818 | +10 3 9 000101111 | |
| 819 | +10 4 10 0001011010 | |
| 820 | +10 5 10 0001010010 | |
| 821 | +10 6 10 0000111010 | |
| 822 | +10 7 10 0000111001 | |
| 823 | +10 8 10 0000110000 | |
| 824 | +10 9 11 00001001000 | |
| 825 | +10 10 11 00000111001 | |
| 826 | +10 11 11 00000101001 | |
| 827 | +10 12 11 00000010111 | |
| 828 | +10 13 12 000000011011 | |
| 829 | +10 14 13 0000000111110 | |
| 830 | +10 15 12 000000001001 | |
| 831 | +11 0 10 0001010110 | |
| 832 | +11 1 9 000101010 | |
| 833 | +11 2 9 000101000 | |
| 834 | +11 3 9 000100101 | |
| 835 | +11 4 10 0001000110 | |
| 836 | +11 5 10 0001000000 | |
| 837 | +11 6 10 0000110100 | |
| 838 | +11 7 10 0000101011 | |
| 839 | +11 8 11 00001000110 | |
| 840 | +11 9 11 00000110111 | |
| 841 | +11 10 11 00000101010 | |
| 842 | +11 11 11 00000011001 | |
| 843 | +11 12 12 000000011101 | |
| 844 | +11 13 12 000000010010 | |
| 845 | +11 14 12 000000001011 | |
| 846 | +11 15 13 0000000001011 | |
| 847 | +12 0 11 00001110110 | |
| 848 | +12 1 10 0001000100 | |
| 849 | +12 2 9 000011110 | |
| 850 | +12 3 10 0000110111 | |
| 851 | +12 4 10 0000110010 | |
| 852 | +12 5 10 0000101110 | |
| 853 | +12 6 11 00001001010 | |
| 854 | +12 7 11 00001000001 | |
| 855 | +12 8 11 00000110001 | |
| 856 | +12 9 11 00000100111 | |
| 857 | +12 10 11 00000011000 | |
| 858 | +12 11 11 00000010000 | |
| 859 | +12 12 12 000000010110 | |
| 860 | +12 13 12 000000001101 | |
| 861 | +12 14 13 0000000001110 | |
| 862 | +12 15 13 0000000000111 | |
| 863 | +13 0 11 00001011011 | |
| 864 | +13 1 10 0000101100 | |
| 865 | +13 2 10 0000100111 | |
| 866 | +13 3 10 0000100110 | |
| 867 | +13 4 10 0000100010 | |
| 868 | +13 5 11 00000111111 | |
| 869 | +13 6 11 00000110100 | |
| 870 | +13 7 11 00000101101 | |
| 871 | +13 8 11 00000011111 | |
| 872 | +13 9 12 000000110100 | |
| 873 | +13 10 12 000000011100 | |
| 874 | +13 11 12 000000010011 | |
| 875 | +13 12 12 000000001110 | |
| 876 | +13 13 12 000000001000 | |
| 877 | +13 14 13 0000000001001 | |
| 878 | +13 15 13 0000000000011 | |
| 879 | +14 0 12 000001111011 | |
| 880 | +14 1 11 00000111100 | |
| 881 | +14 2 11 00000111010 | |
| 882 | +14 3 11 00000110101 | |
| 883 | +14 4 11 00000101111 | |
| 884 | +14 5 11 00000101011 | |
| 885 | +14 6 11 00000100000 | |
| 886 | +14 7 11 00000010110 | |
| 887 | +14 8 12 000000100101 | |
| 888 | +14 9 12 000000011000 | |
| 889 | +14 10 12 000000010001 | |
| 890 | +14 11 12 000000001100 | |
| 891 | +14 12 13 0000000001111 | |
| 892 | +14 13 13 0000000001010 | |
| 893 | +14 14 12 000000000010 | |
| 894 | +14 15 13 0000000000001 | |
| 895 | +15 0 12 000001000111 | |
| 896 | +15 1 11 00000100101 | |
| 897 | +15 2 11 00000100010 | |
| 898 | +15 3 11 00000011110 | |
| 899 | +15 4 11 00000011100 | |
| 900 | +15 5 11 00000010100 | |
| 901 | +15 6 11 00000010001 | |
| 902 | +15 7 12 000000011010 | |
| 903 | +15 8 12 000000010101 | |
| 904 | +15 9 12 000000010000 | |
| 905 | +15 10 12 000000001010 | |
| 906 | +15 11 12 000000000110 | |
| 907 | +15 12 13 0000000001000 | |
| 908 | +15 13 13 0000000000110 | |
| 909 | +15 14 13 0000000000010 | |
| 910 | +15 15 13 0000000000000 | |
| 911 | + | |
| 912 | +.table 16 16 16 1 | |
| 913 | + 0 0 1 1 | |
| 914 | + 0 1 4 0101 | |
| 915 | + 0 2 6 001110 | |
| 916 | + 0 3 8 00101100 | |
| 917 | + 0 4 9 001001010 | |
| 918 | + 0 5 9 000111111 | |
| 919 | + 0 6 10 0001101110 | |
| 920 | + 0 7 10 0001011101 | |
| 921 | + 0 8 11 00010101100 | |
| 922 | + 0 9 11 00010010101 | |
| 923 | + 0 10 11 00010001010 | |
| 924 | + 0 11 12 000011110010 | |
| 925 | + 0 12 12 000011100001 | |
| 926 | + 0 13 12 000011000011 | |
| 927 | + 0 14 13 0000101111000 | |
| 928 | + 0 15 9 000010001 | |
| 929 | + 1 0 3 011 | |
| 930 | + 1 1 4 0100 | |
| 931 | + 1 2 6 001100 | |
| 932 | + 1 3 7 0010100 | |
| 933 | + 1 4 8 00100011 | |
| 934 | + 1 5 9 000111110 | |
| 935 | + 1 6 9 000110101 | |
| 936 | + 1 7 9 000101111 | |
| 937 | + 1 8 10 0001010011 | |
| 938 | + 1 9 10 0001001011 | |
| 939 | + 1 10 10 0001000100 | |
| 940 | + 1 11 11 00001110111 | |
| 941 | + 1 12 12 000011001001 | |
| 942 | + 1 13 11 00001101011 | |
| 943 | + 1 14 12 000011001111 | |
| 944 | + 1 15 8 00001001 | |
| 945 | + 2 0 6 001111 | |
| 946 | + 2 1 6 001101 | |
| 947 | + 2 2 7 0010111 | |
| 948 | + 2 3 8 00100110 | |
| 949 | + 2 4 9 001000011 | |
| 950 | + 2 5 9 000111010 | |
| 951 | + 2 6 10 0001100111 | |
| 952 | + 2 7 10 0001011010 | |
| 953 | + 2 8 11 00010100001 | |
| 954 | + 2 9 10 0001001000 | |
| 955 | + 2 10 11 00001111111 | |
| 956 | + 2 11 11 00001110101 | |
| 957 | + 2 12 11 00001101110 | |
| 958 | + 2 13 12 000011010001 | |
| 959 | + 2 14 12 000011001110 | |
| 960 | + 2 15 9 000010000 | |
| 961 | + 3 0 8 00101101 | |
| 962 | + 3 1 7 0010101 | |
| 963 | + 3 2 8 00100111 | |
| 964 | + 3 3 9 001000101 | |
| 965 | + 3 4 9 001000000 | |
| 966 | + 3 5 10 0001110010 | |
| 967 | + 3 6 10 0001100011 | |
| 968 | + 3 7 10 0001010111 | |
| 969 | + 3 8 11 00010011110 | |
| 970 | + 3 9 11 00010001100 | |
| 971 | + 3 10 12 000011111100 | |
| 972 | + 3 11 12 000011010100 | |
| 973 | + 3 12 12 000011000111 | |
| 974 | + 3 13 13 0000110000011 | |
| 975 | + 3 14 13 0000101101101 | |
| 976 | + 3 15 10 0000011010 | |
| 977 | + 4 0 9 001001011 | |
| 978 | + 4 1 8 00100100 | |
| 979 | + 4 2 9 001000100 | |
| 980 | + 4 3 9 001000001 | |
| 981 | + 4 4 10 0001110011 | |
| 982 | + 4 5 10 0001100101 | |
| 983 | + 4 6 11 00010110011 | |
| 984 | + 4 7 11 00010100100 | |
| 985 | + 4 8 11 00010011011 | |
| 986 | + 4 9 12 000100001000 | |
| 987 | + 4 10 12 000011110110 | |
| 988 | + 4 11 12 000011100010 | |
| 989 | + 4 12 13 0000110001011 | |
| 990 | + 4 13 13 0000101111110 | |
| 991 | + 4 14 13 0000101101010 | |
| 992 | + 4 15 9 000001001 | |
| 993 | + 5 0 9 001000010 | |
| 994 | + 5 1 8 00011110 | |
| 995 | + 5 2 9 000111011 | |
| 996 | + 5 3 9 000111000 | |
| 997 | + 5 4 10 0001100110 | |
| 998 | + 5 5 11 00010111001 | |
| 999 | + 5 6 11 00010101101 | |
| 1000 | + 5 7 12 000100001001 | |
| 1001 | + 5 8 11 00010001110 | |
| 1002 | + 5 9 12 000011111101 | |
| 1003 | + 5 10 12 000011101000 | |
| 1004 | + 5 11 13 0000110010000 | |
| 1005 | + 5 12 13 0000110000100 | |
| 1006 | + 5 13 13 0000101111010 | |
| 1007 | + 5 14 14 00000110111101 | |
| 1008 | + 5 15 10 0000010000 | |
| 1009 | + 6 0 10 0001101111 | |
| 1010 | + 6 1 9 000110110 | |
| 1011 | + 6 2 9 000110100 | |
| 1012 | + 6 3 10 0001100100 | |
| 1013 | + 6 4 11 00010111000 | |
| 1014 | + 6 5 11 00010110010 | |
| 1015 | + 6 6 11 00010100000 | |
| 1016 | + 6 7 11 00010000101 | |
| 1017 | + 6 8 12 000100000001 | |
| 1018 | + 6 9 12 000011110100 | |
| 1019 | + 6 10 12 000011100100 | |
| 1020 | + 6 11 12 000011011001 | |
| 1021 | + 6 12 13 0000110000001 | |
| 1022 | + 6 13 13 0000101101110 | |
| 1023 | + 6 14 14 00001011001011 | |
| 1024 | + 6 15 10 0000001010 | |
| 1025 | + 7 0 10 0001100010 | |
| 1026 | + 7 1 9 000110000 | |
| 1027 | + 7 2 10 0001011011 | |
| 1028 | + 7 3 10 0001011000 | |
| 1029 | + 7 4 11 00010100101 | |
| 1030 | + 7 5 11 00010011101 | |
| 1031 | + 7 6 11 00010010100 | |
| 1032 | + 7 7 12 000100000101 | |
| 1033 | + 7 8 12 000011111000 | |
| 1034 | + 7 9 13 0000110010111 | |
| 1035 | + 7 10 13 0000110001101 | |
| 1036 | + 7 11 13 0000101110100 | |
| 1037 | + 7 12 13 0000101111100 | |
| 1038 | + 7 13 15 000001101111001 | |
| 1039 | + 7 14 15 000001101110100 | |
| 1040 | + 7 15 10 0000001000 | |
| 1041 | + 8 0 10 0001010101 | |
| 1042 | + 8 1 10 0001010100 | |
| 1043 | + 8 2 10 0001010001 | |
| 1044 | + 8 3 11 00010011111 | |
| 1045 | + 8 4 11 00010011100 | |
| 1046 | + 8 5 11 00010001111 | |
| 1047 | + 8 6 12 000100000100 | |
| 1048 | + 8 7 12 000011111001 | |
| 1049 | + 8 8 13 0000110101011 | |
| 1050 | + 8 9 13 0000110010001 | |
| 1051 | + 8 10 13 0000110001000 | |
| 1052 | + 8 11 13 0000101111111 | |
| 1053 | + 8 12 14 00001011010111 | |
| 1054 | + 8 13 14 00001011001001 | |
| 1055 | + 8 14 14 00001011000100 | |
| 1056 | + 8 15 10 0000000111 | |
| 1057 | + 9 0 11 00010011010 | |
| 1058 | + 9 1 10 0001001100 | |
| 1059 | + 9 2 10 0001001001 | |
| 1060 | + 9 3 11 00010001101 | |
| 1061 | + 9 4 11 00010000011 | |
| 1062 | + 9 5 12 000100000000 | |
| 1063 | + 9 6 12 000011110101 | |
| 1064 | + 9 7 13 0000110101010 | |
| 1065 | + 9 8 13 0000110010110 | |
| 1066 | + 9 9 13 0000110001010 | |
| 1067 | + 9 10 13 0000110000000 | |
| 1068 | + 9 11 14 00001011011111 | |
| 1069 | + 9 12 13 0000101100111 | |
| 1070 | + 9 13 14 00001011000110 | |
| 1071 | + 9 14 13 0000101100000 | |
| 1072 | + 9 15 11 00000001011 | |
| 1073 | +10 0 11 00010001011 | |
| 1074 | +10 1 11 00010000001 | |
| 1075 | +10 2 10 0001000011 | |
| 1076 | +10 3 11 00001111101 | |
| 1077 | +10 4 12 000011110111 | |
| 1078 | +10 5 12 000011101001 | |
| 1079 | +10 6 12 000011100101 | |
| 1080 | +10 7 12 000011011011 | |
| 1081 | +10 8 13 0000110001001 | |
| 1082 | +10 9 14 00001011100111 | |
| 1083 | +10 10 14 00001011100001 | |
| 1084 | +10 11 14 00001011010000 | |
| 1085 | +10 12 15 000001101110101 | |
| 1086 | +10 13 15 000001101110010 | |
| 1087 | +10 14 14 00000110110111 | |
| 1088 | +10 15 10 0000000100 | |
| 1089 | +11 0 12 000011110011 | |
| 1090 | +11 1 11 00001111000 | |
| 1091 | +11 2 11 00001110110 | |
| 1092 | +11 3 11 00001110011 | |
| 1093 | +11 4 12 000011100011 | |
| 1094 | +11 5 12 000011011111 | |
| 1095 | +11 6 13 0000110001100 | |
| 1096 | +11 7 14 00001011101010 | |
| 1097 | +11 8 14 00001011100110 | |
| 1098 | +11 9 14 00001011100000 | |
| 1099 | +11 10 14 00001011010001 | |
| 1100 | +11 11 14 00001011001000 | |
| 1101 | +11 12 14 00001011000010 | |
| 1102 | +11 13 13 0000011011111 | |
| 1103 | +11 14 14 00000110110100 | |
| 1104 | +11 15 11 00000000110 | |
| 1105 | +12 0 12 000011001010 | |
| 1106 | +12 1 12 000011100000 | |
| 1107 | +12 2 12 000011011110 | |
| 1108 | +12 3 12 000011011010 | |
| 1109 | +12 4 12 000011011000 | |
| 1110 | +12 5 13 0000110000101 | |
| 1111 | +12 6 13 0000110000010 | |
| 1112 | +12 7 13 0000101111101 | |
| 1113 | +12 8 13 0000101101100 | |
| 1114 | +12 9 15 000001101111000 | |
| 1115 | +12 10 14 00000110111011 | |
| 1116 | +12 11 14 00001011000011 | |
| 1117 | +12 12 14 00000110111000 | |
| 1118 | +12 13 14 00000110110101 | |
| 1119 | +12 14 16 0000011011000000 | |
| 1120 | +12 15 11 00000000100 | |
| 1121 | +13 0 14 00001011101011 | |
| 1122 | +13 1 12 000011010011 | |
| 1123 | +13 2 12 000011010010 | |
| 1124 | +13 3 12 000011010000 | |
| 1125 | +13 4 13 0000101110010 | |
| 1126 | +13 5 13 0000101111011 | |
| 1127 | +13 6 14 00001011011110 | |
| 1128 | +13 7 14 00001011010011 | |
| 1129 | +13 8 14 00001011001010 | |
| 1130 | +13 9 16 0000011011000111 | |
| 1131 | +13 10 15 000001101110011 | |
| 1132 | +13 11 15 000001101101101 | |
| 1133 | +13 12 15 000001101101100 | |
| 1134 | +13 13 17 00000110110000011 | |
| 1135 | +13 14 15 000001101100001 | |
| 1136 | +13 15 11 00000000010 | |
| 1137 | +14 0 13 0000101111001 | |
| 1138 | +14 1 13 0000101110001 | |
| 1139 | +14 2 11 00001100110 | |
| 1140 | +14 3 12 000010111011 | |
| 1141 | +14 4 14 00001011010110 | |
| 1142 | +14 5 14 00001011010010 | |
| 1143 | +14 6 13 0000101100110 | |
| 1144 | +14 7 14 00001011000111 | |
| 1145 | +14 8 14 00001011000101 | |
| 1146 | +14 9 15 000001101100010 | |
| 1147 | +14 10 16 0000011011000110 | |
| 1148 | +14 11 15 000001101100111 | |
| 1149 | +14 12 17 00000110110000010 | |
| 1150 | +14 13 15 000001101100110 | |
| 1151 | +14 14 14 00000110110010 | |
| 1152 | +14 15 11 00000000000 | |
| 1153 | +15 0 9 000001100 | |
| 1154 | +15 1 8 00001010 | |
| 1155 | +15 2 8 00000111 | |
| 1156 | +15 3 9 000001011 | |
| 1157 | +15 4 9 000001010 | |
| 1158 | +15 5 10 0000010001 | |
| 1159 | +15 6 10 0000001011 | |
| 1160 | +15 7 10 0000001001 | |
| 1161 | +15 8 11 00000001101 | |
| 1162 | +15 9 11 00000001100 | |
| 1163 | +15 10 11 00000001010 | |
| 1164 | +15 11 11 00000000111 | |
| 1165 | +15 12 11 00000000101 | |
| 1166 | +15 13 11 00000000011 | |
| 1167 | +15 14 11 00000000001 | |
| 1168 | +15 15 8 00000011 | |
| 1169 | + | |
| 1170 | +.table 17 16 16 2 | |
| 1171 | +.reference 16 | |
| 1172 | + | |
| 1173 | +.table 18 16 16 3 | |
| 1174 | +.reference 16 | |
| 1175 | + | |
| 1176 | +.table 19 16 16 4 | |
| 1177 | +.reference 16 | |
| 1178 | + | |
| 1179 | +.table 20 16 16 6 | |
| 1180 | +.reference 16 | |
| 1181 | + | |
| 1182 | +.table 21 16 16 8 | |
| 1183 | +.reference 16 | |
| 1184 | + | |
| 1185 | +.table 22 16 16 10 | |
| 1186 | +.reference 16 | |
| 1187 | + | |
| 1188 | +.table 23 16 16 13 | |
| 1189 | +.reference 16 | |
| 1190 | + | |
| 1191 | +.table 24 16 16 4 | |
| 1192 | + 0 0 4 1111 | |
| 1193 | + 0 1 4 1101 | |
| 1194 | + 0 2 6 101110 | |
| 1195 | + 0 3 7 1010000 | |
| 1196 | + 0 4 8 10010010 | |
| 1197 | + 0 5 9 100000110 | |
| 1198 | + 0 6 9 011111000 | |
| 1199 | + 0 7 10 0110110010 | |
| 1200 | + 0 8 10 0110101010 | |
| 1201 | + 0 9 11 01010011101 | |
| 1202 | + 0 10 11 01010001101 | |
| 1203 | + 0 11 11 01010001001 | |
| 1204 | + 0 12 11 01001101101 | |
| 1205 | + 0 13 11 01000000101 | |
| 1206 | + 0 14 12 010000001000 | |
| 1207 | + 0 15 9 001011000 | |
| 1208 | + 1 0 4 1110 | |
| 1209 | + 1 1 4 1100 | |
| 1210 | + 1 2 5 10101 | |
| 1211 | + 1 3 6 100110 | |
| 1212 | + 1 4 7 1000111 | |
| 1213 | + 1 5 8 10000010 | |
| 1214 | + 1 6 8 01111010 | |
| 1215 | + 1 7 9 011011000 | |
| 1216 | + 1 8 9 011010001 | |
| 1217 | + 1 9 9 011000110 | |
| 1218 | + 1 10 10 0101000111 | |
| 1219 | + 1 11 10 0101011001 | |
| 1220 | + 1 12 10 0100111111 | |
| 1221 | + 1 13 10 0100101001 | |
| 1222 | + 1 14 10 0100010111 | |
| 1223 | + 1 15 8 00101010 | |
| 1224 | + 2 0 6 101111 | |
| 1225 | + 2 1 5 10110 | |
| 1226 | + 2 2 6 101001 | |
| 1227 | + 2 3 7 1001010 | |
| 1228 | + 2 4 7 1000100 | |
| 1229 | + 2 5 8 10000000 | |
| 1230 | + 2 6 8 01111000 | |
| 1231 | + 2 7 9 011011101 | |
| 1232 | + 2 8 9 011001111 | |
| 1233 | + 2 9 9 011000010 | |
| 1234 | + 2 10 9 010110110 | |
| 1235 | + 2 11 10 0101010100 | |
| 1236 | + 2 12 10 0100111011 | |
| 1237 | + 2 13 10 0100100111 | |
| 1238 | + 2 14 11 01000011101 | |
| 1239 | + 2 15 7 0010010 | |
| 1240 | + 3 0 7 1010001 | |
| 1241 | + 3 1 6 100111 | |
| 1242 | + 3 2 7 1001011 | |
| 1243 | + 3 3 7 1000110 | |
| 1244 | + 3 4 8 10000110 | |
| 1245 | + 3 5 8 01111101 | |
| 1246 | + 3 6 8 01110100 | |
| 1247 | + 3 7 9 011011100 | |
| 1248 | + 3 8 9 011001100 | |
| 1249 | + 3 9 9 010111110 | |
| 1250 | + 3 10 9 010110010 | |
| 1251 | + 3 11 10 0101000101 | |
| 1252 | + 3 12 10 0100110111 | |
| 1253 | + 3 13 10 0100100101 | |
| 1254 | + 3 14 10 0100001111 | |
| 1255 | + 3 15 7 0010000 | |
| 1256 | + 4 0 8 10010011 | |
| 1257 | + 4 1 7 1001000 | |
| 1258 | + 4 2 7 1000101 | |
| 1259 | + 4 3 8 10000111 | |
| 1260 | + 4 4 8 01111111 | |
| 1261 | + 4 5 8 01110110 | |
| 1262 | + 4 6 8 01110000 | |
| 1263 | + 4 7 9 011010010 | |
| 1264 | + 4 8 9 011001000 | |
| 1265 | + 4 9 9 010111100 | |
| 1266 | + 4 10 10 0101100000 | |
| 1267 | + 4 11 10 0101000011 | |
| 1268 | + 4 12 10 0100110010 | |
| 1269 | + 4 13 10 0100011101 | |
| 1270 | + 4 14 11 01000011100 | |
| 1271 | + 4 15 7 0001110 | |
| 1272 | + 5 0 9 100000111 | |
| 1273 | + 5 1 7 1000010 | |
| 1274 | + 5 2 8 10000001 | |
| 1275 | + 5 3 8 01111110 | |
| 1276 | + 5 4 8 01110111 | |
| 1277 | + 5 5 8 01110010 | |
| 1278 | + 5 6 9 011010110 | |
| 1279 | + 5 7 9 011001010 | |
| 1280 | + 5 8 9 011000000 | |
| 1281 | + 5 9 9 010110100 | |
| 1282 | + 5 10 10 0101010101 | |
| 1283 | + 5 11 10 0100111101 | |
| 1284 | + 5 12 10 0100101101 | |
| 1285 | + 5 13 10 0100011001 | |
| 1286 | + 5 14 10 0100000110 | |
| 1287 | + 5 15 7 0001100 | |
| 1288 | + 6 0 9 011111001 | |
| 1289 | + 6 1 8 01111011 | |
| 1290 | + 6 2 8 01111001 | |
| 1291 | + 6 3 8 01110101 | |
| 1292 | + 6 4 8 01110001 | |
| 1293 | + 6 5 9 011010111 | |
| 1294 | + 6 6 9 011001110 | |
| 1295 | + 6 7 9 011000011 | |
| 1296 | + 6 8 9 010111001 | |
| 1297 | + 6 9 10 0101011011 | |
| 1298 | + 6 10 10 0101001010 | |
| 1299 | + 6 11 10 0100110100 | |
| 1300 | + 6 12 10 0100100011 | |
| 1301 | + 6 13 10 0100010000 | |
| 1302 | + 6 14 11 01000001000 | |
| 1303 | + 6 15 7 0001010 | |
| 1304 | + 7 0 10 0110110011 | |
| 1305 | + 7 1 8 01110011 | |
| 1306 | + 7 2 8 01101111 | |
| 1307 | + 7 3 8 01101101 | |
| 1308 | + 7 4 9 011010011 | |
| 1309 | + 7 5 9 011001011 | |
| 1310 | + 7 6 9 011000100 | |
| 1311 | + 7 7 9 010111011 | |
| 1312 | + 7 8 10 0101100001 | |
| 1313 | + 7 9 10 0101001100 | |
| 1314 | + 7 10 10 0100111001 | |
| 1315 | + 7 11 10 0100101010 | |
| 1316 | + 7 12 10 0100011011 | |
| 1317 | + 7 13 11 01000010011 | |
| 1318 | + 7 14 11 00101111101 | |
| 1319 | + 7 15 8 00010001 | |
| 1320 | + 8 0 10 0110101011 | |
| 1321 | + 8 1 9 011010100 | |
| 1322 | + 8 2 9 011010000 | |
| 1323 | + 8 3 9 011001101 | |
| 1324 | + 8 4 9 011001001 | |
| 1325 | + 8 5 9 011000001 | |
| 1326 | + 8 6 9 010111010 | |
| 1327 | + 8 7 9 010110001 | |
| 1328 | + 8 8 9 010101001 | |
| 1329 | + 8 9 10 0101000000 | |
| 1330 | + 8 10 10 0100101111 | |
| 1331 | + 8 11 10 0100011110 | |
| 1332 | + 8 12 10 0100001100 | |
| 1333 | + 8 13 11 01000000010 | |
| 1334 | + 8 14 11 00101111001 | |
| 1335 | + 8 15 8 00010000 | |
| 1336 | + 9 0 10 0101001111 | |
| 1337 | + 9 1 9 011000111 | |
| 1338 | + 9 2 9 011000101 | |
| 1339 | + 9 3 9 010111111 | |
| 1340 | + 9 4 9 010111101 | |
| 1341 | + 9 5 9 010110101 | |
| 1342 | + 9 6 9 010101110 | |
| 1343 | + 9 7 10 0101001101 | |
| 1344 | + 9 8 10 0101000001 | |
| 1345 | + 9 9 10 0100110001 | |
| 1346 | + 9 10 10 0100100001 | |
| 1347 | + 9 11 10 0100010011 | |
| 1348 | + 9 12 11 01000001001 | |
| 1349 | + 9 13 11 00101111011 | |
| 1350 | + 9 14 11 00101110011 | |
| 1351 | + 9 15 8 00001011 | |
| 1352 | +10 0 11 01010011100 | |
| 1353 | +10 1 9 010111000 | |
| 1354 | +10 2 9 010110111 | |
| 1355 | +10 3 9 010110011 | |
| 1356 | +10 4 9 010101111 | |
| 1357 | +10 5 10 0101011000 | |
| 1358 | +10 6 10 0101001011 | |
| 1359 | +10 7 10 0100111010 | |
| 1360 | +10 8 10 0100110000 | |
| 1361 | +10 9 10 0100100010 | |
| 1362 | +10 10 10 0100010101 | |
| 1363 | +10 11 11 01000010010 | |
| 1364 | +10 12 11 00101111111 | |
| 1365 | +10 13 11 00101110101 | |
| 1366 | +10 14 11 00101101110 | |
| 1367 | +10 15 8 00001010 | |
| 1368 | +11 0 11 01010001100 | |
| 1369 | +11 1 10 0101011010 | |
| 1370 | +11 2 9 010101011 | |
| 1371 | +11 3 9 010101000 | |
| 1372 | +11 4 9 010100100 | |
| 1373 | +11 5 10 0100111110 | |
| 1374 | +11 6 10 0100110101 | |
| 1375 | +11 7 10 0100101011 | |
| 1376 | +11 8 10 0100011111 | |
| 1377 | +11 9 10 0100010100 | |
| 1378 | +11 10 10 0100000111 | |
| 1379 | +11 11 11 01000000001 | |
| 1380 | +11 12 11 00101110111 | |
| 1381 | +11 13 11 00101110000 | |
| 1382 | +11 14 11 00101101010 | |
| 1383 | +11 15 8 00000110 | |
| 1384 | +12 0 11 01010001000 | |
| 1385 | +12 1 10 0101000010 | |
| 1386 | +12 2 10 0100111100 | |
| 1387 | +12 3 10 0100111000 | |
| 1388 | +12 4 10 0100110011 | |
| 1389 | +12 5 10 0100101110 | |
| 1390 | +12 6 10 0100100100 | |
| 1391 | +12 7 10 0100011100 | |
| 1392 | +12 8 10 0100001101 | |
| 1393 | +12 9 10 0100000101 | |
| 1394 | +12 10 11 01000000000 | |
| 1395 | +12 11 11 00101111000 | |
| 1396 | +12 12 11 00101110010 | |
| 1397 | +12 13 11 00101101100 | |
| 1398 | +12 14 11 00101100111 | |
| 1399 | +12 15 8 00000100 | |
| 1400 | +13 0 11 01001101100 | |
| 1401 | +13 1 10 0100101100 | |
| 1402 | +13 2 10 0100101000 | |
| 1403 | +13 3 10 0100100110 | |
| 1404 | +13 4 10 0100100000 | |
| 1405 | +13 5 10 0100011010 | |
| 1406 | +13 6 10 0100010001 | |
| 1407 | +13 7 10 0100001010 | |
| 1408 | +13 8 11 01000000011 | |
| 1409 | +13 9 11 00101111100 | |
| 1410 | +13 10 11 00101110110 | |
| 1411 | +13 11 11 00101110001 | |
| 1412 | +13 12 11 00101101101 | |
| 1413 | +13 13 11 00101101001 | |
| 1414 | +13 14 11 00101100101 | |
| 1415 | +13 15 8 00000010 | |
| 1416 | +14 0 12 010000001001 | |
| 1417 | +14 1 10 0100011000 | |
| 1418 | +14 2 10 0100010110 | |
| 1419 | +14 3 10 0100010010 | |
| 1420 | +14 4 10 0100001011 | |
| 1421 | +14 5 10 0100001000 | |
| 1422 | +14 6 10 0100000011 | |
| 1423 | +14 7 11 00101111110 | |
| 1424 | +14 8 11 00101111010 | |
| 1425 | +14 9 11 00101110100 | |
| 1426 | +14 10 11 00101101111 | |
| 1427 | +14 11 11 00101101011 | |
| 1428 | +14 12 11 00101101000 | |
| 1429 | +14 13 11 00101100110 | |
| 1430 | +14 14 11 00101100100 | |
| 1431 | +14 15 8 00000000 | |
| 1432 | +15 0 8 00101011 | |
| 1433 | +15 1 7 0010100 | |
| 1434 | +15 2 7 0010011 | |
| 1435 | +15 3 7 0010001 | |
| 1436 | +15 4 7 0001111 | |
| 1437 | +15 5 7 0001101 | |
| 1438 | +15 6 7 0001011 | |
| 1439 | +15 7 7 0001001 | |
| 1440 | +15 8 7 0000111 | |
| 1441 | +15 9 7 0000110 | |
| 1442 | +15 10 7 0000100 | |
| 1443 | +15 11 8 00000111 | |
| 1444 | +15 12 8 00000101 | |
| 1445 | +15 13 8 00000011 | |
| 1446 | +15 14 8 00000001 | |
| 1447 | +15 15 4 0011 | |
| 1448 | + | |
| 1449 | +.table 25 16 16 5 | |
| 1450 | +.reference 24 | |
| 1451 | + | |
| 1452 | +.table 26 16 16 6 | |
| 1453 | +.reference 24 | |
| 1454 | + | |
| 1455 | +.table 27 16 16 7 | |
| 1456 | +.reference 24 | |
| 1457 | + | |
| 1458 | +.table 28 16 16 8 | |
| 1459 | +.reference 24 | |
| 1460 | + | |
| 1461 | +.table 29 16 16 9 | |
| 1462 | +.reference 24 | |
| 1463 | + | |
| 1464 | +.table 30 16 16 11 | |
| 1465 | +.reference 24 | |
| 1466 | + | |
| 1467 | +.table 31 16 16 13 | |
| 1468 | +.reference 24 | |
| 1469 | + | |
| 1470 | +.table 32 1 16 0 | |
| 1471 | + 0 1 1 | |
| 1472 | + 1 4 0101 | |
| 1473 | + 2 4 0100 | |
| 1474 | + 3 5 00101 | |
| 1475 | + 4 4 0110 | |
| 1476 | + 5 6 000101 | |
| 1477 | + 6 5 00100 | |
| 1478 | + 7 6 000100 | |
| 1479 | + 8 4 0111 | |
| 1480 | + 9 5 00011 | |
| 1481 | + 10 5 00110 | |
| 1482 | + 11 6 000000 | |
| 1483 | + 12 5 00111 | |
| 1484 | + 13 6 000010 | |
| 1485 | + 14 6 000011 | |
| 1486 | + 15 6 000001 | |
| 1487 | + | |
| 1488 | +.table 33 1 16 0 | |
| 1489 | + 0 4 1111 | |
| 1490 | + 1 4 1110 | |
| 1491 | + 2 4 1101 | |
| 1492 | + 3 4 1100 | |
| 1493 | + 4 4 1011 | |
| 1494 | + 5 4 1010 | |
| 1495 | + 6 4 1001 | |
| 1496 | + 7 4 1000 | |
| 1497 | + 8 4 0111 | |
| 1498 | + 9 4 0110 | |
| 1499 | + 10 4 0101 | |
| 1500 | + 11 4 0100 | |
| 1501 | + 12 4 0011 | |
| 1502 | + 13 4 0010 | |
| 1503 | + 14 4 0001 | |
| 1504 | + 15 4 0000 | |
| 1505 | + | |
| 1506 | +.end | |
| @@ -0,0 +1,348 @@ | ||
| 1 | +#include <stdio.h> | |
| 2 | +#include <stdlib.h> | |
| 3 | +#include <assert.h> | |
| 4 | +#include <string.h> | |
| 5 | + | |
| 6 | +#define WROOT 5 /* fixed width (bits) of root table (MUST also be changed in the decoder C code) */ | |
| 7 | +#define WMAX 7 /* max width of sub-table */ | |
| 8 | +#define LAMBDA 512 /* Lagrange multiplier for MIPS/bytes trade-off: 1 table jump cost == LAMBDA bytes. Table cost = # of bytes + LAMBDA * # of jumps */ | |
| 9 | +#define OPTIMIZE_SIZE 0 /* flag to force LAMBDA==0 (free jumps, table cost == table size) */ | |
| 10 | + | |
| 11 | +#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |
| 12 | +#define MAX(a, b) ((a) > (b) ? (a) : (b)) | |
| 13 | + | |
| 14 | +typedef struct huff_t | |
| 15 | +{ | |
| 16 | + struct huff_t *link; | |
| 17 | + struct huff_t *parent; | |
| 18 | + struct huff_t *child[2]; | |
| 19 | + int level; | |
| 20 | + unsigned symbol; | |
| 21 | + unsigned code; | |
| 22 | + | |
| 23 | + struct | |
| 24 | + { | |
| 25 | + int best_width, size; | |
| 26 | + float mips; | |
| 27 | + } dp; | |
| 28 | + | |
| 29 | + int backref; | |
| 30 | + int offset; | |
| 31 | + | |
| 32 | + enum { E_PAIR, E_QUAD } symbol_kind; | |
| 33 | +} huff_t; | |
| 34 | + | |
| 35 | +static int is_leaf(const huff_t *h) | |
| 36 | +{ | |
| 37 | + return !h->child[0] && !h->child[1]; | |
| 38 | +} | |
| 39 | + | |
| 40 | +static int imax(int a, int b) | |
| 41 | +{ | |
| 42 | + return MAX(a, b); | |
| 43 | +} | |
| 44 | + | |
| 45 | +static char *BIT_str(unsigned x, int bits) | |
| 46 | +{ // Print x as bitpattern: 01 (LBS bits) | |
| 47 | + static int idx; | |
| 48 | + static char buf[8][33]; // up to 8 simultaneous numbers | |
| 49 | + char *p = buf[++idx & 7]; | |
| 50 | + while (bits--) | |
| 51 | + { | |
| 52 | + *p++ = "01"[(x >> bits) & 1]; | |
| 53 | + } | |
| 54 | + *p++ = 0; | |
| 55 | + return buf[idx & 7]; | |
| 56 | +} | |
| 57 | + | |
| 58 | +huff_t *huff_create(huff_t *h, unsigned symbol, unsigned code, int code_len, int level, int symbol_kind) | |
| 59 | +{ | |
| 60 | + if (!h) | |
| 61 | + { | |
| 62 | + h = (huff_t*)calloc(1, sizeof(huff_t)); | |
| 63 | + h->level = level; | |
| 64 | + h->symbol = code_len ? ~0 : symbol; | |
| 65 | + h->code = code_len ? ~0 : code; | |
| 66 | + h->dp.size = 1; | |
| 67 | + h->dp.mips = 1.f/(1 << level); | |
| 68 | + h->backref = -1; | |
| 69 | + h->symbol_kind = symbol_kind; | |
| 70 | + } | |
| 71 | + if (h && code_len > 0) | |
| 72 | + { | |
| 73 | + int bit = (code >> --code_len) & 1; | |
| 74 | + h->child[bit] = huff_create(h->child[bit], symbol, code, code_len, level + 1, symbol_kind); | |
| 75 | + } | |
| 76 | + return h; | |
| 77 | +} | |
| 78 | + | |
| 79 | +void huff_free(huff_t *h) | |
| 80 | +{ | |
| 81 | + if (h) | |
| 82 | + { | |
| 83 | + huff_free(h->child[0]); | |
| 84 | + huff_free(h->child[1]); | |
| 85 | + free(h); | |
| 86 | + } | |
| 87 | +} | |
| 88 | + | |
| 89 | +huff_t *read_codebook(int book) | |
| 90 | +{ | |
| 91 | + FILE *f = fopen("HUFFCODE", "rt"); | |
| 92 | + huff_t *tree = NULL; | |
| 93 | + int tab = -1, mx, my, lin; | |
| 94 | + do | |
| 95 | + { | |
| 96 | + if (4 != fscanf(f, "\n.table %d %d %d %d", &tab, &mx, &my, &lin)) | |
| 97 | + { | |
| 98 | + fscanf(f, "%*[^\n]"); | |
| 99 | + } | |
| 100 | + } while(tab != book && !feof(f)); | |
| 101 | + if (tab == book) | |
| 102 | + { | |
| 103 | + int i, j; | |
| 104 | + for (i = 0; i < mx*my; i++) | |
| 105 | + { | |
| 106 | + int x, y, len, icode = 0; | |
| 107 | + char code[30]; | |
| 108 | + if (book < 32) | |
| 109 | + { | |
| 110 | + while (4 != fscanf(f, "\n%d %d %d %s", &x, &y, &len, code)) | |
| 111 | + { | |
| 112 | + fscanf(f, "%*[^\n]"); | |
| 113 | + } | |
| 114 | + } else | |
| 115 | + { | |
| 116 | + x = 0; | |
| 117 | + while (3 != fscanf(f, "\n%d %d %s", &y, &len, code)) | |
| 118 | + { | |
| 119 | + fscanf(f, "%*[^\n]"); | |
| 120 | + } | |
| 121 | + } | |
| 122 | + for (j = 0; j < len; j++) | |
| 123 | + { | |
| 124 | + icode <<= 1; | |
| 125 | + icode |= code[j] - '0'; | |
| 126 | + } | |
| 127 | + | |
| 128 | + tree = huff_create(tree, (x << 16) + y, icode, len, 0, book < 32 ? E_PAIR : E_QUAD); | |
| 129 | + } | |
| 130 | + } | |
| 131 | + fclose(f); | |
| 132 | + return tree; | |
| 133 | +} | |
| 134 | + | |
| 135 | +int huff_symbols_count(const huff_t *h) | |
| 136 | +{ | |
| 137 | + return h ? is_leaf(h) + huff_symbols_count(h->child[0]) + huff_symbols_count(h->child[1]) : 0; | |
| 138 | +} | |
| 139 | + | |
| 140 | +int huff_depth(const huff_t *h) | |
| 141 | +{ | |
| 142 | + return is_leaf(h) ? 0 : (1 + imax(huff_depth(h->child[0]), huff_depth(h->child[1]))); | |
| 143 | +} | |
| 144 | + | |
| 145 | +int huff_size(const huff_t *h, int depth) | |
| 146 | +{ | |
| 147 | + return is_leaf(h) ? 0 : (--depth < 0) ? h->dp.size : huff_size(h->child[0], depth) + huff_size(h->child[1], depth); | |
| 148 | +} | |
| 149 | + | |
| 150 | +float huff_cost(const huff_t *h, int depth) | |
| 151 | +{ | |
| 152 | + return is_leaf(h) ? 0 : (--depth < 0) ? h->dp.mips : huff_cost(h->child[0], depth) + huff_cost(h->child[1], depth); | |
| 153 | +} | |
| 154 | + | |
| 155 | +const huff_t *huff_decode(const huff_t *h, unsigned code, int code_len) | |
| 156 | +{ | |
| 157 | + return (!code_len || is_leaf(h)) ? h : huff_decode(h->child[(code >> (code_len - 1)) & 1], code, code_len - 1); | |
| 158 | +} | |
| 159 | + | |
| 160 | +void huff_optimize_partition(huff_t *h) | |
| 161 | +{ | |
| 162 | + int i, depth, wmin, wmax; | |
| 163 | + if (h && !is_leaf(h)) | |
| 164 | + { | |
| 165 | + // DP call: | |
| 166 | + huff_optimize_partition(h->child[0]); | |
| 167 | + huff_optimize_partition(h->child[1]); | |
| 168 | + depth = huff_depth(h); | |
| 169 | + | |
| 170 | + wmin = h->level ? 1 : WROOT; | |
| 171 | + wmax = wmin > 1 ? wmin : MIN(depth, WMAX); | |
| 172 | + | |
| 173 | + if (h->symbol_kind == E_QUAD && !h->level) | |
| 174 | + { | |
| 175 | + wmax = wmin = 4; | |
| 176 | + } | |
| 177 | + | |
| 178 | + h->dp.size = huff_size(h, h->dp.best_width = wmin) + (1 << wmin); | |
| 179 | + h->dp.mips = huff_cost(h, h->dp.best_width = wmin) + 1.f/(1 << h->level); | |
| 180 | + | |
| 181 | + for (i = wmin + 1; i <= wmax; i++) | |
| 182 | + { | |
| 183 | + int size = huff_size(h, i) + (1 << i); | |
| 184 | + float mips = huff_cost(h, i) + 1.f/(1 << h->level); | |
| 185 | + float cost_i; | |
| 186 | + float cost_have; | |
| 187 | + | |
| 188 | + cost_i = mips*LAMBDA + size; | |
| 189 | + cost_have = h->dp.mips*LAMBDA + h->dp.size; | |
| 190 | +#if OPTIMIZE_SIZE | |
| 191 | + cost_i = (float)size; | |
| 192 | + cost_have = (float)h->dp.size; | |
| 193 | +#endif | |
| 194 | + | |
| 195 | + if (cost_i < cost_have) | |
| 196 | + { | |
| 197 | + h->dp.best_width = i; | |
| 198 | + h->dp.size = size; | |
| 199 | + h->dp.mips = mips; | |
| 200 | + } | |
| 201 | + } | |
| 202 | + } | |
| 203 | +} | |
| 204 | + | |
| 205 | +void huff_print_one(const huff_t *h, FILE *f, int parent_level) | |
| 206 | +{ | |
| 207 | + if (h->symbol_kind == E_PAIR) | |
| 208 | + { | |
| 209 | + if (is_leaf(h)) | |
| 210 | + { | |
| 211 | + int x = h->symbol << 16 >> 16; | |
| 212 | + int y = h->symbol << 0 >> 16; | |
| 213 | + fprintf(f, "%d,", ((h->level - parent_level)*256 + (x << 4) + (y << 0))); | |
| 214 | + } else | |
| 215 | + { | |
| 216 | + assert(h->offset < (1 << 13)); | |
| 217 | + assert(h->offset); | |
| 218 | + fprintf(f, "%d,", (-h->offset << 3) | h->dp.best_width); | |
| 219 | + } | |
| 220 | + } else | |
| 221 | + { | |
| 222 | + if (is_leaf(h)) | |
| 223 | + { | |
| 224 | + fprintf(f, "%d,", (h->symbol*16 + 8 + h->level)); | |
| 225 | + } else | |
| 226 | + { | |
| 227 | + fprintf(f, "%d,", (h->offset << 3) | h->dp.best_width); | |
| 228 | + //fprintf(f, "[%d,%d]", h->offset , h->dp.best_width); | |
| 229 | + } | |
| 230 | + } | |
| 231 | +} | |
| 232 | + | |
| 233 | +void huff_set_links_bfs(huff_t *h, FILE *f) | |
| 234 | +{ | |
| 235 | + int print_flag; | |
| 236 | + for (print_flag = 0; print_flag <= 1; print_flag++) | |
| 237 | + { | |
| 238 | + huff_t *q = h; | |
| 239 | + huff_t *queue_head = NULL; | |
| 240 | + huff_t **queue_tail = &queue_head; | |
| 241 | + int offs = 0; | |
| 242 | + while (q) | |
| 243 | + { | |
| 244 | + int i, w = 1 << q->dp.best_width; | |
| 245 | + for (i = 0; i < w; i++) | |
| 246 | + { | |
| 247 | + huff_t *r = (huff_t *)huff_decode(q, i, q->dp.best_width); | |
| 248 | + if (print_flag) | |
| 249 | + { | |
| 250 | + huff_print_one(r, f, q->level); | |
| 251 | + } | |
| 252 | + | |
| 253 | + if (!is_leaf(r)) | |
| 254 | + { | |
| 255 | + r->backref = offs;// + i; | |
| 256 | + *queue_tail = r; | |
| 257 | + queue_tail = &r->link; | |
| 258 | + } | |
| 259 | + } | |
| 260 | + offs += w; | |
| 261 | + q = queue_head; | |
| 262 | + if (q) | |
| 263 | + { | |
| 264 | + if ((queue_head = q->link) != NULL) | |
| 265 | + { | |
| 266 | + queue_tail = &queue_head; | |
| 267 | + } | |
| 268 | + q->offset = offs;// - q->backref; | |
| 269 | + } | |
| 270 | + } | |
| 271 | + } | |
| 272 | +} | |
| 273 | + | |
| 274 | +void huff_set_links_dfs_recursion(huff_t *h, FILE *f, int print_flag, int *off) | |
| 275 | +{ | |
| 276 | + int i, w = 1 << h->dp.best_width; | |
| 277 | + h->offset = *off; | |
| 278 | + *off += w; | |
| 279 | + for (i = 0; print_flag && i < w; i++) | |
| 280 | + { | |
| 281 | + huff_print_one(huff_decode(h, i, h->dp.best_width), f, h->level); | |
| 282 | + } | |
| 283 | + for (i = 0; i < w; i++) | |
| 284 | + { | |
| 285 | + huff_t *q = (huff_t *)huff_decode(h, i, h->dp.best_width); | |
| 286 | + if (!is_leaf(q)) | |
| 287 | + { | |
| 288 | + huff_set_links_dfs_recursion(q, f, print_flag, off); | |
| 289 | + } | |
| 290 | + } | |
| 291 | +} | |
| 292 | + | |
| 293 | +void huff_set_links_dfs(huff_t *h, FILE *f) | |
| 294 | +{ | |
| 295 | + int off = 0; | |
| 296 | + huff_set_links_dfs_recursion(h, f, 0, &off); | |
| 297 | + huff_set_links_dfs_recursion(h, f, 1, &off); | |
| 298 | +}; | |
| 299 | + | |
| 300 | +int main() | |
| 301 | +{ | |
| 302 | + int i; | |
| 303 | + const int tabn[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,24,32,33 }; | |
| 304 | + int total_size = 0; | |
| 305 | + int entry_bits[32]; | |
| 306 | + | |
| 307 | + FILE *dst_file = fopen("Huffman_tree.inl", "wt"); | |
| 308 | + | |
| 309 | + for (i = 0; i < sizeof(tabn)/sizeof(tabn[0]); i++) | |
| 310 | + { | |
| 311 | + huff_t *h = read_codebook(tabn[i]); | |
| 312 | + huff_optimize_partition(h); | |
| 313 | + | |
| 314 | + printf("\ntable %2d ", tabn[i]); | |
| 315 | + printf("%3d symbols ", huff_symbols_count(h)); | |
| 316 | + printf("%3d items ", h ? h->dp.size : 0); | |
| 317 | + printf("%1d entry ", h ? h->dp.best_width : 0); | |
| 318 | + printf("%f average memory reads ", h ? h->dp.mips : 0); | |
| 319 | + total_size += h ? h->dp.size : 0; | |
| 320 | + | |
| 321 | + fprintf(dst_file, "static const %s tab%d[] = { ", tabn[i] < 32 ? "short" : "u8", tabn[i]); | |
| 322 | + if (h) | |
| 323 | + { | |
| 324 | + //huff_set_links_bfs(h, dst_file); | |
| 325 | + huff_set_links_dfs(h, dst_file); | |
| 326 | + entry_bits[i] = h->dp.best_width; | |
| 327 | + } else | |
| 328 | + { | |
| 329 | + fprintf(dst_file, "0"); | |
| 330 | + entry_bits[i] = 0; | |
| 331 | + } | |
| 332 | + fprintf(dst_file, " };\n"); | |
| 333 | + huff_free(h); | |
| 334 | + } | |
| 335 | +#if WROOT > 1 | |
| 336 | + fprintf(dst_file, "#define HUFF_ENTRY_BITS %d\n", WROOT); | |
| 337 | +#else | |
| 338 | + fprintf(dst_file, "#define HUFF_ENTRY_BITS 0\n"); | |
| 339 | + fprintf(dst_file, "static const u8 g_entry_bits[] = { "); | |
| 340 | + for (i = 0; i < sizeof(tabn)/sizeof(tabn[0]); i++) | |
| 341 | + { | |
| 342 | + fprintf(dst_file, "%d,", entry_bits[i]); | |
| 343 | + } | |
| 344 | + fprintf(dst_file, " };\n", i); | |
| 345 | +#endif | |
| 346 | + fclose(dst_file); | |
| 347 | + printf("\n// Total: %d items\n", total_size); | |
| 348 | +} | |