hi all

I write a pattern like this:
(define_insn "extrv4di"
  [(set (match_operand:V4DI 0 "register_operand" "=Z")
        (unspec:V4DI
          [(match_operand:V4DI 1 "register_operand" "Z")
           (match_operand:SI 2 "immediate_operand" "")]
          UNSPEC_EXTR))]
  "TARGET_VECTORS"
  "extrd\t%0,%1,%2"
  [(set_attr "type" "vadd")])

and the the code in mips.c:
#define CODE_FOR_extrd CODE_FOR_extrv4di
  XX_BUILTIN (extrd, MIPS_V4DI_FTYPE_V4DI_INT),

define a macro in mips.md:
   (UNSPEC_EXTR         821)

the xx.h:
__extension__ static __inline int64x4_t __attribute__ ((__always_inline__))
extrd (int64x4_t s, const int i)
{
  return __builtin_extrd (s, i);
}

When I write a testcase like:
int64x4_t vec_vpextrd (int64x4_t s, const int t)
{
  int64x4_t r;
  r = vpextrd (s, t);
  return r;
}

I get a error:
/opt/cross-tools/bin/../lib/gcc/mips64el-unknown-linux-gnu/4.5.1/include/xx.h:1535:31:
error: invalid argument to built-in function

What should I do? What's the type of imm8/imm16 in builtin-func?

Thanks.

--Liu

Reply via email to