ARM Performance Counter
코드가 느린 게 캐시 미스 때문인지, 분기 예측 실패 때문인지, 아니면 그냥 명령어 수가 많아서인지는 로그나 타이머만으로는 알기 어렵다. wall clock 시간은 "얼마나 걸렸는지"만 알려줄 뿐, "왜 걸렸는지"는 알려주지 않는다.…
코드가 느린 게 캐시 미스 때문인지, 분기 예측 실패 때문인지, 아니면 그냥 명령어 수가 많아서인지는 로그나 타이머만으로는 알기 어렵다. wall clock 시간은 "얼마나 걸렸는지"만 알려줄 뿐, "왜 걸렸는지"는 알려주지 않는다.…
C 코드를 gcc -S로 컴파일해 어셈블리 출력을 구경해본 적은 있어도, 처음부터 어셈블리만으로 프로그램을 짜서 빌드하고 실행해본 경험은 드물다. 하지만 커널의 부팅 초기 코드, 예외/인터럽트 벡터 핸들러, 컨텍스트 스위칭처럼 C로는 표현할…
ARMv8부터 새로 추가된 64비트 명령어 집합 A64(AArch64 상태에서 실행)는 기존 32비트 ARM/Thumb(A32/T32)과 문법이 상당히 다르다. 레지스터 이름, 조건 코드, 주소 지정 방식을 매번 ARM 공식 문서에서 찾아보기는 번거롭기 때문에, 자주…
반도체 설계 인력 부족이 산업계의 화두로 떠오른 가운데, GIST(광주과학기술원)가 글로벌 반도체 IP 기업 Arm과 손잡고 'GIST-Arm School 반도체 설계 교육 프로그램'을 본격 운영한다. 2025년 2월 체결된 MOU의 후속 조치로 시작된…
ARM64(AArch64)에서 inline asm은 문법이 어렵다기보다, 컴파일러가 더 엄격하고 최적화가 더 공격적이라서 사고가 난다. 특히 벤더 커널을 Clang으로 옮길 때는 constraint 선택, clobber, barrier 세 가지가 대부분의 원인이다. 이 글에서는 ARM64에서…
ARM은 32비트 RISC(Reduced Instruction Set Computing) 마이크로프로세서 아키텍처이다. 초기에는 주로 저전력 소비를 위해 설계되었지만, 현재는 다양한 분야의 기기에서 널리 사용되고 있다. ARM 아키텍처에 대해 요약해 본다. 프로세서 모드 ARM 프로세서는…
AAPCS를 따르는 Arm 아키텍처에서는 서브루틴 호출을 위한 명령어를 사용하여 함수를 호출하고 복귀하는 방식을 취한다. 서브루틴 호출 명령어 Arm 명령어 세트에는 링크 포함 분기 작업을 수행하는 기본 서브루틴 호출 명령어 인…
AAPCS(Procedure Call Standard for Arm Architecture) 기본 프로시저 호출 표준은 Arm 명령어 집합에 공통인 기계 수준의 코어 레지스터만 사용하는 호출 표준을 정의한다. 머신 레지스터(Machine Registers) Arm 아키텍처는 핵심 명령어 세트와…
AAPCS(Procedure Call Standard for ARM Architecture)는 ARM 아키텍처에서 사용되는 응용 프로그램 바이너리 인터페이스이다. ARM 아키텍처에 대한 전체 ABI 사양의 일부를 구성한다. 설계 목표 AAPCS의 설계 목표는 다음과 같다. Thumb-state 와…
AAPCS(Arm Architecture Procedure Call Standard)와 EABI(Embedded Application Binary Interface)는 ARM 아키텍처 기반의 시스템에서 사용되는 응용 프로그램 바이너리 인터페이스의 다른 측면을 나타낸다. 이 둘은 서로 밀접하게 관련되어 있으며, 아래에서 그 관계를…