On Fri, Jan 16, 2009 at 12:47 PM, Andrew Pinski <pins...@gmail.com> wrote:
> On Fri, Jan 16, 2009 at 11:35 AM, Jack Lloyd <ll...@randombit.net> wrote:
>> According to the info docs, the Alpha has __builtin_alpha_rpcc which
>> doesn't take any inputs either, and should just call rpcc much as an
>> rdtsc intrinsic would, so it may provide a more direct model.
>
> (define_insn "builtin_rpcc"
>  [(set (match_operand:DI 0 "register_operand" "=r")
>        (unspec_volatile:DI [(const_int 0)] UNSPECV_RPCC))]
>  ""
>  "rpcc %0"
>  [(set_attr "type" "ilog")])
>
> So yes this is exactly what I was mentioning to do ...
>

The problem is 64bit. I have

(define_insn "*rdtsc_rex64"
  [(parallel [(set (match_operand:DI 0 "register_operand" "=a")
                   (unspec_volatile:DI [(const_int 0)] UNSPECV_RDTSC_EAX))
              (set (match_operand:DI 1 "register_operand" "=d")
                   (unspec_volatile:DI [(const_int 0)] UNSPECV_RDTSC_EDX))])]
  "TARGET_64BIT"
  "rdtsc"
  [(set_attr "type" "other")
   (set_attr "length" "2")])

But I got

y.c: In function 'foo2':
y.c:7: error: unrecognizable insn:
(insn 5 4 6 3 y.c:6 (parallel [
            (set (reg:DI 62)
                (unspec_volatile [
                        (const_int 0 [0x0])
                    ] 19))
            (set (reg:DI 61)
                (unspec_volatile [
                        (const_int 0 [0x0])
                    ] 20))
        ]) -1 (nil))
y.c:7: internal compiler error: in extract_insn, at recog.c:2027
Please submit a full bug report,

It looks like I can't use 2 unspec_volatile SETs in one RTL.

-- 
H.J.

Reply via email to