← 목록
기타 2026-07-07 3KB 읽기 3분

CCP 압축기 Phase11 — WASM 디코더 + 한선씨 TRIT 인코더 + x86 SHA-NI (3종 동시)

개요

사용자 요청 "셋 다" — Phase10 이후 남은 세 과제를 모두 완료. 각각 실제 검증까지.

① 한선씨 TRIT 인코더 (src/CCP인코더.한선)

  • order-0 적응 레인지 ENCODER(C rc_encode 1:1 거울) — 디코더와 동일 u32 무손실 산술층(몫2k/몫/곱32) + 모델 공유.
  • 전리터럴 LZ(유효 mode2 스트림) + SHA256 머클(버퍼SHA256 바이너리안전 + 문자열버퍼 hex→bytes 재해시 → C merkle_root 단일블록 일치) + STORE 폴백.
  • 검증: 한선씨 압축 → 네이티브 ccp d = byte-identical, 체크섬 OK. 8/8 다양성(tiny/binary/random=STORE, text 65%/zeros 3%/big60k 46%=TRIT).
  • 압축률은 order-0 산술코딩만(LZ 매치탐색은 차기 과제).

② 브라우저 WASM 디코더 (wasm/)

  • 정답 경로 = crowny-wasm(wasm_emit.c) 아님(루프/함수/버퍼 미지원) → 풀 크라우니 VM을 emcc로 wasm화CCP디코더-브라우저.한선 toau를 그대로 실행.
  • ccp해제(ccpBytes) → Uint8Array API(Node·브라우저 공용) + 데모.html + 빌드.sh.
  • 검증: 4모드(STORE·RLE·LZ·TRIT) 전부 byte-identical(Node v26).
  • 핵심 돌파: emcc 풀VM은 long이 wasm32서 32bit → 정수 2^30 캡 → 레인지코더 붕괴. -sMEMORY64=1(wasm64)로 64bit 복구(±1.41e11 데스크톱 일치). + wasm은 calloc 지연커밋 없어 MEM_DEFAULT 144M 초과 → crownyc.c #ifndef MEM_DEFAULT 가드(네이티브 미영향) + -DMEM_DEFAULT=8000000.

③ x86 SHA-NI (src/ccp.c)

  • ARM64 SHA-NI 옆에 #elif __x86_64__ 분기 추가(Walton 공개도메인 루틴, target("sha,sse4.1,ssse3")).
  • constructor 런타임 자가검증: HW vs 스칼라 테스트벡터 대조 → 불일치 시 스칼라 폴백. 미검증 HW 경로라도 안전(정확성 보장).
  • arm64 무회귀(L1/L5/L9 PASS), x86 크로스컴파일 clean, Rosetta는 SHA 미지원 → 스칼라 폴백(SIGILL 없음). 실기 x86 HW 활성 검증은 차기.

관련 파일

  • src/CCP인코더.한선, src/CCP디코더-브라우저.한선, src/ccp.c(x86 SHA-NI)
  • wasm/(ccp해제.js·데모.html·빌드.sh·crownyc-vm64.{js,wasm}·ccp디코더.toau)
  • /Users/ef/CrownyOS/crownyc/crownyc.c(#ifndef MEM_DEFAULT 가드)

잔여 이슈 / 다음(Phase12)

  • 한선씨 TRIT 인코더에 LZ 매치탐색 추가(압축률↑), 멀티블록 인코더
  • x86 SHA-NI 실기 x86 하드웨어 검증
  • 브라우저 요건: MEMORY64(Chrome 133+/최신 Firefox); 성능=이중해석이라 참조/검증용