이번에는 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 <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
 
 
 

+ Recent posts