(R5900) Implementing Vector Support

Liu Woon Yung ysai187@yahoo.com
Fri Apr 29 17:54:00 GMT 2016

Hi Richard,

Thank you for your input so far. I think that I am starting to have a 
clearer picture of things.

Unfortunately, I haven't been able to put together a working system for 
the vector comparison stuff.

> The second operand is the comparison operator.  So given
>   (set (reg:V4SI x) (eq:V4SI (reg:V4SI y) (reg:V4SI z))
> operand 0 is x,
> operand 1 is the entire (eq ...) expression,
> operand 2 is y,
> operand 3 is z.
> This is exactly the same as the normal integer cbranch<mode> patterns.

I've done something like that, but GCC still doesn't select the pattern 
to use:
     (define_insn "vec_cmp<MMI_VCMP_OP:code><MMI_VWHB:mode>"
       [(set (match_operand:MMI_VWHB 0 "register_operand" "=d")
                (MMI_VCMP_OP:MMI_VWHB (match_operand:MMI_VWHB 1 
"register_operand" "d")
(match_operand:MMI_VWHB 2 "register_operand" "d")))]

This was based on the one from the s390 port.

If it is worth implementing the vec_cmp patterns, is there an example 
for me to refer to?

> rs6000 doesn't implement bare comparisons, but only implements the 
> "vcond" conditional move upon which uses the comparison.  Many of the 
> other targets do the same thing.
Is there a reason why implementing only vcond is preferred?

Thanks and Regards,
-W Y

More information about the Gcc mailing list