Нелегальная инструкция — vcvtsi2sd

Я пишу программу для вычисления баз Гребнера с использованием библиотеки ФГБ. Хотя он имеет интерфейс C, я вызываю библиотеку из кода C ++, скомпилированного с g ++ в Ubuntu.

Компилируя с опцией -g и используя x / i $ pc в gdb, недопустимая инструкция выглядит следующим образом.

0x421c39 FGb_xmalloc_spec + 985: vcvtsi2sd% rbx,% xmm0,% xmm0

Строка выше имеет угловые скобки вокруг FGB_xmalloc_spec + 985. Насколько я могу судить, мой процессор не поддерживает эту инструкцию, и я пытаюсь выяснить, почему программа использует ее. Мне кажется, что инструкция идет из кода библиотеки. Тем не менее, код, который я компилирую используемый работать на настольном компьютере теперь не удается — однажды только начали бросать нелегальную инструкцию. Я предположил, что испортил некоторые библиотеки или что-то еще, поэтому я переустановил Ubuntu 16.04, но продолжаю получать недопустимые инструкции. Тот же самый точный код работает на другом настольном компьютере и Chromebook с Ubuntu 16.04 и 14.04 соответственно.

Техническая информация:

  • g ++: 5.4.0 20160609
  • GDB: 7.11.1
  • Ubuntu: 16.04 / 14.04 LTS
  • Процесс: вывод x86info

    Найдено 4 идентичных процессора
    Расширенная семья: 0 Расширенная модель: 1 Семья: 6 Модель: 23 Степпинг: 10
    Тип: 0 (Оригинальный OEM)
    Модель процессора (лучшая догадка x86info): Core 2 Duo
    Строка имени процессора (запрограммирован BIOS): Intel (R) Core (TM) 2 Quad CPU Q9650 с частотой 3,00 ГГц

  • флаги процессора

    fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good npl pxsssmpxpspxpxsmpxpsmps sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority dtherm

  • Линия компиляции

    g ++ -std = c ++ 11 -g -I src -o bin / main.o -c src / main.cpp

    g ++ -std = c ++ 11 -g -I src -o bin / Polynomial.o -c src / Polynomial.cpp

    g ++ -std = c ++ 11 -g -I src -o bin / Util.o -c src / Util.cpp

    g ++ -std = c ++ 11 -g -I src -o bin / Solve.o -c src / Solve.cpp

    g ++ -std = c ++ 11 -g -o bin / Start-up bin / main.o bin / Util.o bin / Polynomial.o bin / Solve.o -Llib -lfgb -lfgbexp -lgb -lgbexp -lminpoly -lminpolyvgf — lgmp -lm -fopenmp

На данный момент я не уверен, что еще можно предпринять, чтобы избежать этой незаконной инструкции, и приветствую любые предложения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]