как написать __asm__ Перейти к встроенной сборке - PullRequest
0 голосов
/ 21 ноября 2018

Я использую компилятор GCC.Я хочу вставить некоторые встроенные инструкции в C. Инструкции без ветвления вставляются успешно с использованием директивы __ asm __ следующим образом:

  __asm__ volatile (
            "add %[my_out], %[my_op1], %[my_op2]\n"
            : [my_out] "=&r" (array[3])
            : [my_op1] "r" (array[0]),[my_op2] "r" (array[1])
    );

Но я не могу вставить инструкцию перехода / перехода.Компиляция выдает следующую ошибку:

../test.c:5: error: expected '(' before 'goto'
../test.c:5: error: expected identifier or '*' before 'volatile'

Я попробовал следующий код:

unsigned int array[10] = { 0x22, 0x12,0,0,0,0,0,0,0};
int main() {


  __asm__ goto volatile (
                "jp %l[label]\n"
                : /*no output*/
                : [my_op1] "r" (array[0]),[my_op2] "r" (array[1])
                : /*no cobblers*/
                : label
        );


  return 0;

label:

  __asm__ volatile (
                "add %[my_out], %[my_op1], %[my_op2]\n"
                : [my_out] "=&r" (array[3])
                : [my_op1] "r" (array[0]),[my_op2] "r" (array[1])
        );


  return 0;

}

Можете ли вы помочь исправить этот код?Привет

...