이번에는 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 <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 4장: 어셈블리 명령어' 카테고리의 다른 글
[Armv8] 전체 어셈블리 명령어 타입 - Tech Tree (0) | 2023.06.10 |
---|---|
[Arm] ASR(Arithmetic Shift Right) 명령어 (0) | 2023.06.10 |
[ARM] 'yield' 명령어 (0) | 2023.06.10 |
[ARMv8] cbnz 명령어 (0) | 2023.06.10 |
[ARM] 어셈블리 명령어란 (0) | 2023.06.10 |