David Edelsohn wrote:
        I would prefer feature-based.

        TARGET_HARD_FLOAT represents the presence of FPUs.

        TARGET_FPRS represents the presence of FP register set because
one variant used GPRs for FP operations.

        E500 then added another variant with double-precision FP in the
GPRs.

How about this:

(define_expand "negdf2"
  [(set (match_operand:DF 0 "gpc_reg_operand" "")
    (neg:DF (match_operand:DF 1 "gpc_reg_operand" "")))]
  "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
  "")

For an instruction supported on all variants (both BookE and E500)
with a double precision FPU.


(define_expand "negsf2"
  [(set (match_operand:SF 0 "gpc_reg_operand" "")
        (neg:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
  "TARGET_HARD_FLOAT && TARGET_SINGLE_FLOAT"
  "")

For an instruction supported on all variants with a
single precision FPU or a double precision FPU which
supports single precision operations.


(define_insn "floatdidf2"
  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
        (float:DF (match_operand:DI 1 "gpc_reg_operand" "*f")))]
  "TARGET_POWERPC64 &&
   TARGET_HARD_FLOAT &&
     (TARGET_FPRS && TARGET_DOUBLE_FLOAT)"
  "fcfid %0,%1"
  [(set_attr "type" "fp")])

for an instruction supported on BookE only with double
precision FPU.


(define_insn "*subsf3_gpr"
  [(set (match_operand:SF 0 "gpc_reg_operand" "=r")
        (minus:SF (match_operand:SF 1 "gpc_reg_operand" "r")
                  (match_operand:SF 2 "gpc_reg_operand" "r")))]
  "TARGET_HARD_FLOAT &&
     (!TARGET_FPRS && TARGET_SINGLE_FLOAT)"
  "efssub %0,%1,%2"
  [(set_attr "type" "fp")])

for an instruction on E500 only with single precision FP.


(define_insn "fixuns_truncdfsi2"
  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
        (unsigned_fix:SI (match_operand:DF 1 "gpc_reg_operand" "r")))]
  "TARGET_HARD_FLOAT &&
     (!TARGET_FPRS && TARGET_DOUBLE_FLOAT"
  "efdctuiz %0,%1"
  [(set_attr "type" "fp")])

for an instruction on E500 only with double precision FP.

--
Michael Eager    [EMAIL PROTECTED]
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Reply via email to