ISA729 실효성 감사 — s2_비교_162-242 구간
개요
ISA729_IMPL.md 924개 구현 opcode 중 162~242 구간(81개) 전수 실효성 체크.
비교/논리(162-174), 하드웨어GPIO/센서(175-224), 동적메모리(225-233), 분산/TMR(234-242) 4블록.
방법
- 162-174: hanseonc_high.c 내장 연산자(==,!=,>,<,!,&&,||,>=,<=)로 컴파일→실행, 기존 tests/02_비교.한선·고수준_v10회귀.한선로 커버 확인
- 168-171(CMP/TRUE/FALSE/UNKNOWN)·225-242(동적메모리/분산/TMR): hanseonc_high의
__내장__(opcode, args...) raw-opcode 이스케이프해치로 직접 테스트 (해당 opcode들은 고수준 컴파일러가 정상 소스 문법으로는 방출하지 않음 — 라이브 검증에 __내장__ 필수)
- 175-224 (GPIO/센서/I2C/SPI/UART/LCD/카메라 등 하드웨어): 규칙에 따라 실행 금지, 소스 구현 존재만 확인(host 분류)
결과 (총 81개)
- ok: 29
- host(미실행): 50
- noop(결격): 2 — TMR_EXEC(239), TMR_CHECK(241)
- crash/untested: 0
핵심 결격 사례
- TMR_EXEC(239, 타이머실행): 정상 CALL로
더하기5(10)을 호출하면 15를 올바르게 반환하지만, 동일 함수주소를 TMR_EXEC(3중 재실행+다수결)로 실행하면 결과가 1로 나옴(기대 15). 2개의 독립 컴파일본에서 재현. 원인 추정: case 239의 내부 재실행 루프가 program[pc++] 수동 디코드를 사용하는데, 이 디코드 경로가 메인 fetch-decode 루프와 미묘하게 어긋나 함수 바디의 진입 오프셋을 놓치는 것으로 보임(트레이스에서 재실행 1회차 pc=002가 STR_STATS/FB_COMPOSE 등 무관한 opcode로 디코드됨).
- TMR_CHECK(241, 타이머확인): 문서상 [원본,복사1,복사2]→[T(전체일치)/O(과반일치)/A(불일치)] 3원 판정인데, 실제로는 (1,2,3), (0,1,-1), (100,200,300), (1,000,000, -1,000,000, 500,000) 등 어떤 조합을 넣어도 A(-1/거짓) 분기에 절대 도달하지 않고 항상 O(0) 또는 T(1)만 나옴. 원인: 균형3진 24트릿 표현에서 작은 정수는 상위 트릿 대부분이 0으로 패딩되어, 값이 완전히 달라도 트릿 일치개수가 임계값(≥12/24)을 항상 넘어버림 — "완전불일치" 판정이 사실상 죽은 코드.
부가 관찰(결격은 아니지만 주의)
- TMR_SCRUB(242)는 addr1의 첫 슬롯을 "블록크기 메타"로 해석하는 암묵 프로토콜이 있음(문서 코멘트엔 미기재) — 이를 모르고 임의 데이터를 addr1[0]에 쓰면 블록크기가 엉뚱한 값으로 해석되어 대량 오정정 발생(실측: corrected=41). 프로토콜 준수 시(addr1[0]=의도한 블록크기) 정상 동작 확인.
- FREE(229)/TMR_VOTE(240)/TMR_EXEC(239)는 pop한 개수보다 push하는 개수가 다르거나(FREE=0 push) 여러 값을 push(TMR_VOTE=2, TMR_EXEC=2)하는데, 고수준 문법의 단일대입(
변수 x = ...)은 스택 최상단 1개만 소비 — 나머지가 스택에 잔류. 이번 테스트에서는 프레임 변수가 별도 메모리(LOAD_FP 기반)라 기능적 오류로 이어지지 않았으나, 장기 누적 시 스택 소진 가능성 있음.
산출물
/Users/ef/CrownyOS/docs/isa729-감사-20260709/실효성_s2_비교_162-242.psv — op|영문|한글|분류|판정|증거1줄, 81행
- 테스트 스크립트/토우 산출물:
/tmp/isa_sandbox/s2_비교_162-242/ (세션 임시, 영속 아님)
잔여 이슈
- TMR_EXEC(239) 정확한 근본원인(디코드 오프셋 오정합) 미확정 — crownyc.c case 239 코드 라인 8899 부근 재검증 필요(읽기전용 원칙상 이번 세션에서 수정하지 않음, 보고만)
- TMR_CHECK(241) 임계값(≥12/24) 설계 재검토 필요 — 실제 데이터페이로드가 24트릿 전체를 채우는 시나리오(예: 벡터/이미지 데이터)에서는 정상 작동할 가능성 있으나, 스칼라 정수 용도로는 사실상 무용