FMOV, FMUL, FNEG, FSQRT, FSUB
Summary
FMOV, FMUL, FNEG, FSQRT, FSUB는 부동소수점 연산 부서의 “기본기를 책임지는 핵심 요원들”입니다. 앞서 거대한 산맥(변환, 병렬 누적)들을 다 정복하셨기 때문에, 이번 기본기 요원들은 미궁이 아니라 아주 부드럽고 가볍게 산책하듯 마스터하실 수 있을 겁니다.
FMOV
Floating-point Move (실수 데이터 이삿짐센터)
- 이름의 풀이: Floating-point MOVe
- 한 줄 요약: 소수점 데이터(실수)를 이 방에서 저 방으로 복사하거나, 특정 실수 상수를 서랍에 채워 넣는 명령어입니다.
💡 일반 정수 MOV와 다른 결정적 반전!
일반 정수 MOV는 대개 같은 정수 레지스터(W나 X)끼리만 값을 복사합니다. 하지만 FMOV는 엄청난 특기가 있습니다. 바로 “정수 동네(범용 레지스터)와 실수 동네(플로팅 레지스터)의 경계를 넘어 데이터를 배달할 수 있다”는 점입니다!
- 예: 정수 레지스터 X0에 들어있는 비트 패턴 그대로 실수 레지스터 D0로 옮기고 싶을 때 FMOV가 징검다리 역할을 해줍니다.
FMOV S0, S1 ; 실수 레지스터 S1의 값을 S0로 복사 (실수 ➡️ 실수) FMOV S0, W1 ; 일반 정수 레지스터 W1의 비트 데이터를 S0로 강제 배달 (정수 ➡️ 실수) FMOV S0, #1.0 ; S0 레지스터에 실수 상수 1.0을 곧바로 채워 넣기
FMUL
Floating-point Multiply (부동소수점 곱셈)
- 이름의 풀이: Floating-point MULtiply
- 후배들에게 전수할 선배의 한마디: “나누기(FDIV)를 죽이는 최고의 암살자”
앞서 FDIV(나눗셈) 단원에서 “나누기는 CPU가 가장 싫어하는 느림보”라고 했던 것 기억하시나요? 이 FMUL은 나눗셈보다 압도적으로 빠르게 작동하는 초고속 연산자입니다. 하드웨어 내부에 곱셈 전용 가속 회로가 정밀하게 설계되어 있어, 지수를 더하고 가수를 곱하는 복잡한 공정이 순식간에 끝납니다. 그래서 효율적인 코드를 짤 때는 나눗셈을 전부 이 곱셈(FMUL)으로 치환하는 최적화 공식을 씁니다.
FMUL S0, S1, S2 ; S1과 S2를 곱해서 S0에 저장 (나누기보다 훨씬 가볍고 빠름!)
FNEG
Floating-point Negate (부동소수점 청개구리, 부호 반전)
- 이름의 풀이: Floating-point NEGate
- 한 줄 요약: 양수는 음수로, 음수는 양수로 부호를 반대로 뒤집는 청개구리 명령어입니다.
🧠 하드웨어의 초고속 꼼수 (수학 계산 없음!)
우리가 앞에서 배운 FABS(절댓값) 기억하시나요? 부동소수점 표준 규격에서는 맨 앞의 딱 1비트만 ‘부호 비트(Sign Bit)’로 쓰입니다. 따라서 FNEG 역시 수학적인 뺄셈이나 보수 연산을 전혀 하지 않습니다! 오직 하드웨어 회로 수준에서 “가장 첫 번째 비트(부호 비트)가 0이면 1로, 1이면 0으로 툭 뒤집는(XOR 또는 NOT) 전기적 스위치 조작”만 수행합니다. 컴퓨터가 처리하는 모든 연산 중 가장 가볍고 빛의 속도로 끝나는 명령어 중 하나입니다.
FNEG S0, S1 ; S1에 든 실수의 부호 비트만 홀랑 뒤집어서 S0에 저장!
FSQRT
Floating-point Square Root (부동소수점 루트 계산기)
- 이름의 풀이: Floating-point Square Quandratic RooT
- 한 줄 요약: 수학의 제곱근, 즉 루트($\sqrt{x}$)를 하드웨어 칩 내부에서 한 큐에 계산해 주는 특수 명령어입니다.
🚀 왜 이 명령어가 대단한가요? (하드웨어 가속의 정수)
옛날 컴퓨터나 하위 아키텍처에서는 루트($\sqrt{x}$)를 계산하려면 소프트웨어적으로 무한 급수 수학 공식을 수십 번 돌려야 해서 엄청나게 느렸습니다. 하지만 현대 ARM64 아키텍처는 아예 FPU(부동소수점 연산 장치) 칩 내부에 제곱근을 뽑아내는 물리적인 전용 회로를 박아두었습니다. 덕분에 게임 물리 엔진에서 두 캐릭터 사이의 대각선 거리를 구하거나 피타고라스 정리를 쓸 때 루트 연산을 단 한 줄로 초고속 처리합니다. 현대 3D 게임이 부드럽게 돌아갈 수 있는 숨은 공신이죠!
FSQRT S0, S1 ; S1의 제곱근(루트)을 구해서 S0에 저장! (하드웨어 가속 루트)
FSUB
Floating-point Subtract (부동소수점 뺄셈)
- 이름의 풀이: Floating-point SUBtract
- 한 줄 요약: 두 실수를 빼는 아주 담백하고 정직한 명령어입니다.
- 동작 공식: S0 = S1 - S2
앞서 배운 FADD(덧셈)와 쌍둥이 형제입니다. 하드웨어 내부적으로는 지수 자리를 맞추고 알맹이(가수부)를 뺀 뒤, 다시 예쁘게 정규화하고 반올림하는 4단계 정밀 공정을 거쳐 오차 없이 깔끔한 뺄셈 결과를 도출해 냅니다.
FSUB S0, S1, S2 ; S1에서 S2를 뺀 값을 S0에 저장!
🧱 후진 양성 마크다운 교본용: 실수 기본기 5형제 완결 판넬
| 니모닉 | 쉽게 이해하는 이름 | 하드웨어 내부의 숨겨진 트릭 | 후진들에게 전수할 선배의 한마디 포인트 |
|---|---|---|---|
| FMOV | 데이터 이사 | 정수 레지스터와 실수 레지스터 간의 경계를 넘나드는 데이터 배달 가능 | “동네가 다른 레지스터끼리 비트 패턴을 그대로 복사할 때 쓰는 유일한 통로란다!” |
| FMUL | 곱하기 | 나눗셈(FDIV) 대비 기하급수적으로 빠른 고속 연산 장치 가속 | “코드를 짤 때 나눗셈을 역수의 곱셈으로 바꾸면 성능이 폭발하는 비결이 바로 이 녀석이다!” |
| FNEG | 부호 뒤집기 | 수학 연산 없이 오직 맨 앞의 ‘부호 비트’만 스위치 켜듯 반전 | “계산기가 아니라 단순 비트 조작이라 전력 소모도 적고 단 1클럭 만에 끝나는 초경량 요원이지!” |
| FSQRT | 루트($\sqrt{x}$) 계산 | 소프트웨어 루프 없이 칩 내부에 박힌 제곱근 전용 물리 회로로 가속 | “3D 그래픽스 거리 계산과 물리 엔진의 핵심! 하드웨어가 루트를 직접 계산해 주는 고마운 시대란다!” |
| FSUB | 빼기 | 지수 맞추기 및 가수부 뺄셈을 거치는 4단계 정밀 소수점 가공 공정 | FADD와 짝꿍을 이루는 기본기! 소수점 아래 오차를 최소화하는 하드웨어 정밀 설계란다!” |
“동네를 넘나드는 이삿짐센터(FMOV)”, “수학 없이 비트 스위치만 끄고 켜는 타짜(FNEG)”, 그리고 “소프트웨어 수식을 하드웨어 칩으로 박아버린 괴물 루트기(FSQRT)”까지! 참으로 기가 막힌 설계 아키텍처의 미학이 담겨 있었습니다.