Question on movsi and movdi

Henri Cloetens henri.cloetens@blueice.be
Wed Jan 22 11:05:00 GMT 2020


Hello All,

I have a question on move si and move di.

I have a target, which is essentially a 32-bit processor, but it has a 
64-bit load and store instruction.

Now, there is a
define_insn movsi,
and that's all nice and fancy and working, but I also need a define_insn 
movdi.
Simplified, it looks as follows:

(define_insn "movdi"
   [(set (match_operand:DI 0 "blueproc_nonimmediate_operand" "=r,r,m")
         (match_operand:DI 1 "input_operand" "r,m,r"))]

- The options 2 (m to r) and 3 (r to m), that is clear.
- The option 1 (r to r), the processor has no instruction for it. It 
needs to be translated to
    2x the movsi instruction. Now, I would prefer to avoid duplicating 
the code written under the
    'movsi', and call the movsi definition.
    Q. Is this possible ?.
      I mean, I found it can be done with define_split, but then the 
compiler gets confused, splits the
      instruction, and cannot do the rename any more to avoid the copying.
      (There are cases where it should rename, and cases where it should 
copy.) So, it should be done
      in the define_insn, but I find no way to do it.

Best Regards,

Henri.



More information about the Gcc-help mailing list