带有两个返回寄存器的内联汇编指令

时间:2017-10-10 22:06:49

标签: gcc assembly inline-assembly

我有一个处理器的自定义指令,它有两个返回寄存器和两个操作数,如:

MINMAX rdMin, RdMax, rs1, rs2

返回rs1和rs2的最小值和最大值。我已经使用汇编程序验证了这条指令。它工作正常。现在我想使用内联汇编从GCC使用此指令。我尝试了以下代码,但它没有给出正确的rdMin和rdMax值。语法中是否有任何错误。

int main() {
   unsigned int array[10] = { 45, 75,0,0,0,0,0,0,0};
  int op1=16,op2=18,out,out1,out2;
   //asm for AVG rd, rs1, rs2
  __asm__ volatile (
                "avg %[my_out], %[my_op1], %[my_op2]\n"
                : [my_out] "=&r" (out)
                : [my_op1] "r" (op1),[my_op2] "r" (op2)
        );
   //asm for MinMax rdMin, rdMax, rs1, rs2
  __asm__ volatile (
                "minmax %[my_out1], %[my_out2], %[my_op1], %[my_op2]\n"
                : [my_out1] "=r" (out1), [my_out2] "=r" (out2)
                : [my_op1] "r" (op1), [my_op2] "r" (op2)
        );

  array[3] = out;
  array[4] = out1;
  array[5] = out2;
  return 0;
}

感谢。

0 个答案:

没有答案