피드로 돌아가기
Where did the 0.5 go? An Initial Exploration of C Type Coercion and CPU Registers
Dev.toDev.to
Infrastructure

C Type Coercion 과정의 xmm0 레지스터 내 IEEE 754 데이터 흐름 분석

Where did the 0.5 go? An Initial Exploration of C Type Coercion and CPU Registers

Eric Miguel2026년 4월 14일4intermediate

Context

C 언어의 서로 다른 데이터 타입 간 연산 시 발생하는 Type Coercion의 내부 동작 원리를 분석함. 고수준 언어의 추상화 뒤에 숨겨진 CPU 레지스터 수준의 데이터 변환 및 손실 과정을 규명하고자 함.

Technical Solution

  • Usual Arithmetic Conversions에 따른 정수형 데이터의 Floating-point 타입으로의 자동 Promotion 수행
  • GCC 컴파일러의 cvtsi2sd 명령어를 통한 int 값의 double 타입 변환 및 xmm0 레지스터 할당
  • addsd 명령어를 이용해 xmm0 레지스터 내에서 64-bit 부동소수점 덧셈 연산 처리
  • cvttsd2si 명령어를 통한 Floating-point 결과값의 Truncation 및 정수형 변환 수행
  • Inline Assembly를 활용하여 Truncation 직전 xmm0 레지스터의 IEEE 754 raw bytes를 캡처함으로써 일시적 상태 검증

- 정수와 부동소수점 혼합 연산 시 발생하는 암시적 형변환으로 인한 데이터 정밀도 손실 가능성 검토 - 컴파일러의 -S 플래그를 활용하여 고수준 코드의 실제 CPU 명령어 세트(Instruction Set) 매핑 확인 - 정밀한 수치 계산이 필요한 시스템 설계 시 cvttsd2si와 같은 Truncation 동작이 비즈니스 로직에 미치는 영향 분석

원문 읽기