This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

having trouble with define_split


Hi,

I am currently working on adding native fixed-point support to the avr
backend.  A lot of stuff is working, but there are a few things left,
one of them is conversions from fixed point to floating point.

I have conversions between all integer and fixed point types working
as well as SA to SF conversion.

I want to convert the fixed point types smaller than SA to float by
using define_split to convert to SA then to SF.  I am first trying to
get QQ->SF working, one of the things I tried is:

(define_expand "fractqqsf2"
  [(set (match_operand:SF 0 "register_operand" "")
        (fract_convert:SF (match_operand:QQ 1 "register_operand" "")))
   (clobber (match_operand:SA 2 "register_operand" ""))]
  ""
  "")

(define_split
  [(set (match_operand:SF 0 "register_operand" "")
        (fract_convert:SF (match_operand:QQ 1 "register_operand" "")))
   (clobber (match_operand:SA 2 "register_operand" ""))]
  ""
  [(set (match_dup 2) (fract_convert:SA (match_dup 1)))
   (set (match_dup 0) (fract_convert:SF (match_dup 2)))]
"")

This causes the compiler to crash with a segmentation fault.  I have
tried a bunch of other strategies, and usually the compiler complains
about unrecognized instruction.  I'm not sure what I'm doing wrong,
but I don't have a good reference example for this.  I can implement
these routines in a library, that might end up being better in terms
of space, but I would like to know what I am doing wrong and how to
use define_split correctly.

Thanks,
Sean


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]