Hi!

On Wed, Oct 16, 2019 at 09:47:41AM -0400, Michael Meissner wrote:
> This patch fixes the stack protection insns to support stacks larger than
> 16-bits on the 'future' system using prefixed loads and stores.

> +;; We can't use the prefixed attribute here because there are two memory
> +;; instructions.  We can't split the insn due to the fact that this operation
> +;; needs to be done in one piece.
>  (define_insn "stack_protect_setdi"
>    [(set (match_operand:DI 0 "memory_operand" "=Y")
>       (unspec:DI [(match_operand:DI 1 "memory_operand" "Y")] UNSPEC_SP_SET))
>     (set (match_scratch:DI 2 "=&r") (const_int 0))]
>    "TARGET_64BIT"
> -  "ld%U1%X1 %2,%1\;std%U0%X0 %2,%0\;li %2,0"
> +{
> +  if (prefixed_memory (operands[1], DImode))
> +    output_asm_insn ("pld %2,%1", operands);
> +  else
> +    output_asm_insn ("ld%U1%X1 %2,%1", operands);
> +
> +  if (prefixed_memory (operands[0], DImode))
> +    output_asm_insn ("pstd %2,%0", operands);
> +  else
> +    output_asm_insn ("std%U0%X0 %2,%0", operands);

We could make %pN mean 'p' for prefixed, for memory as operands[N]?  Are
there more places than this that could use that?  How about inline asm?

> +   (set (attr "length")
> +     (cond [(and (match_operand 0 "prefixed_memory")
> +                 (match_operand 1 "prefixed_memory"))
> +            (const_string "24")
> +
> +            (ior (match_operand 0 "prefixed_memory")
> +                 (match_operand 1 "prefixed_memory"))
> +            (const_string "20")]
> +
> +           (const_string "12")))])

You can use const_int instead of const_string here, I think?  Please do
that if it works.

Quite a simple expression, phew :-)

> +  if (which_alternative == 0)
> +    output_asm_insn ("xor. %3,%3,%4", operands);
> +  else
> +    output_asm_insn ("cmpld %0,%3,%4\;li %3,0", operands);

That doesn't work: the backslash is treated like the escape character, in
a C block.  I think doubling it will work?  Check the generated insn-output.c,
it should be translated to \t\n in there.

Okay for trunk with those things taken care of.  Thanks!


Segher

Reply via email to