시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/4장: 어셈블리 명령어
[ARM프로세서] 'csel' 명령어
AustinKim
2023. 6. 10. 12:00
이번에는 ARMv8 아키텍처에서 제공하는 명령어 중에 C 언어의 3항 연산자가 연상되는 csel를 알아봅시다.
다음은 분석하려는 코드입니다.
115| printk(!error ? "okay\n" : "failed\n");
MX:FFFFFF8009BB2404|F0FFE748 adrp x8,0xFFFFFF800989D000
MX:FFFFFF8009BB2408|F0FFE289 adrp x9,0xFFFFFF8009805000
MX:FFFFFF8009BB240C|91026108 add x8,x8,#0x98 ; x8,x8,#152
MX:FFFFFF8009BB2410|91192529 add x9,x9,#0x649 ; x9,x9,#1609
MX:FFFFFF8009BB2414|7100027F cmp w19,#0x0 ; error,#0
MX:FFFFFF8009BB2418|9A880120 csel x0,x9,x8,eq
[1] w19가 0인 경우
* 'cmp w19,#0x0 ; error,#0' //실행 후 CPSR의 Z 필드는 1로 업데이트됨
* 'csel x0,x9,x8,eq' // x9를 x0에 저장함
[2] w19가 0이 아닌 경우
* 'cmp w19,#0x0 ; error,#0' //실행 후 CPSR의 Z 필드는 0으로 업데이트됨
* 'csel x0,x9,x8,eq' // x8를 x0에 저장함
CSEL
Conditional select, returning the first or second input.
Syntax
CSEL Wd, Wn, Wm, cond ; 32-bit general registers
CSEL Xd, Xn, Xm, cond ; 64-bit general registers
아래는 conditional bit
Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
