var++ к байтовой переменной на ARM64
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.01.23 22:48
Оценка:
Перетаскиваю код с x86/x64 на ARM64, собирая toolset'ом от VS 2019 (14.29.30140). Там, где на писюковых процессорах все идеально, на ARM64 (под QEMU 7.2.0) падает на внутренней отладочной проверке фактической разрядности значения (служебная функция CRT RTC_Check_4_to_1). В этом месте постфиксный ++ применяется к байтовой (unsigned char) переменной, имеющей значение 0xFF:

; 2297 :           Buf [i] = WData++;

    ldr         w8,[sp,#0x58]
    uxtw        x9,w8
    mov         x8,#1
    mul         x9,x9,x8
    ldr         x8,[sp,#0x18]
    add         x9,x8,x9
    ldrb        w8,[sp,#0x49]
    strb        w8,[x9]
    ldrb        w8,[sp,#0x49]
    add         w0,w8,#1
    mov         w0,w0
    bl          _RTC_Check_4_to_1
    uxtb        w8,w0
    mov         w8,w8
    mov         w8,w8
    strb        w8,[sp,#0x49]


Перед вызовом RTC_Check_4_to_1 w0/x0 имеют значение 0x100.

Компилятор делает неправильный код (по идее, должно быть явное обрезание после инкремента)? Или такое поведение возможно на некоторых архитектурах при применении ++ к байтовой переменной?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.