Мой процессор 32 или 64 бит?

Sep 10 2020

Не путать с 32-битной или 64-битной моей ОС .

Это очень просто, скажите мне, поддерживает ли мой процессор 64-битные инструкции. Если мой процессор поддерживает 32-битные инструкции, выведите «32», если мой процессор поддерживает 64-битные инструкции, выведите «64», если мой процессор наивно поддерживает другие длины инструкций, выведите «другое».

Ваша программа должна работать как в 32-битном, так и в 64-битном режимах инструкций, и при правильной интерпретации должна работать как в 32-битном, так и в 64-битном интерпретаторах.

Тестовые случаи:

Arch: x86, i386, i686, RiscV32
Выход: '32'

Arch: x86-64, x64, x86_64, RiscV64
Выход: '3264'

Арка: R700
Выход '32other'

Применяются обычные правила игры в гольф .

Удачи!

Ответы

3 Neil Sep 10 2020 at 15:08

Bash + coreutils, 33 25 байт

lscpu|grep -Po '..(?=-b)'

Не пробуйте онлайн! Не будет работать, потому что песочница TIO не поддерживает lscpu. Изменить: сохранено 8 байтов благодаря @DigitalTrauma.

1 TehPers Sep 11 2020 at 00:22

Ржавчина , 45 байт

||if std::usize::MAX>4294967295{3264}else{32}

Попробуйте онлайн! (Кросс-компилятор для 32-разрядных локально путем установки набора инструментов для i686 Например:. stable-i686-pc-windows-msvc)

Невозможно проверить это на каких-либо архитектурах, которые поддерживают «другие» длины инструкций, но это можно использовать для проверки 32-битных или 64-битных архитектур. Это короче, чем при использовании встроенного cfg!(target_pointer_width="64").