MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / __THPHuffDecodeTab

Function __THPHuffDecodeTab

src/dolphin/src/thp/THPDec.c:1275–1511  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1273}
1274
1275inline s32 __THPHuffDecodeTab(register THPFileInfo *info, register THPHuffmanTab *h)
1276{
1277 register s32 code;
1278 register u32 cnt;
1279 register s32 cb;
1280 register u32 increment;
1281 register s32 tmp;
1282
1283#define cnt4 code
1284 asm
1285 {
1286 lwz cnt, info->cnt;
1287 addi increment, h, 32;
1288 lwz cb, info->currByte;
1289 addi cnt4, cnt, 4;
1290 cmpwi cnt, 28;
1291 rlwnm tmp, cb, cnt4, 27, 31;
1292 bgt _notEnoughBits;
1293 lbzx code, h, tmp;
1294 lbzx increment, increment, tmp;
1295 cmpwi code, 0xFF;
1296 beq _FailedCheckEnoughBits;
1297 add cnt, cnt, increment;
1298 stw cnt, info->cnt;
1299 }
1300_done:
1301 return code;
1302
1303 {
1304 register u32 maxcodebase;
1305 register u32 tmp2;
1306
1307 _FailedCheckEnoughBits:
1308 maxcodebase = (u32) & (h->maxCode);
1309 cnt += 5;
1310
1311 asm {
1312 li tmp2, sizeof(s32)*(5);
1313 li code, 5;
1314 add maxcodebase, maxcodebase, tmp2;
1315 __WHILE_START:
1316 cmpwi cnt, 33;
1317 slwi tmp, tmp, 1
1318
1319 beq _FCEB_faster;
1320 rlwnm increment, cb, cnt, 31, 31;
1321 lwzu tmp2, 4(maxcodebase);
1322 or tmp, tmp, increment
1323 addi cnt, cnt, 1;
1324 b __WHILE_CHECK;
1325
1326 _FCEB_faster:
1327 lwz increment, info->c;
1328 li cnt, 1;
1329 lwzu cb, 4(increment);
1330 lwzu tmp2, 4(maxcodebase);
1331
1332 stw increment, info->c;

Callers 2

__THPHuffDecodeDCTCompYFunction · 0.85
THPDec.cFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected