Andrew Haley writes: > > The easiest way to do that is simply to disable the patterns that > generate the floating-point operations. I think the pattern is this > one: > > (define_insn "*movdi_internal64" > [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,*f,*f,m,r,*h,*h") > (match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))] > "TARGET_POWERPC64 > && (gpc_reg_operand (operands[0], DImode) > || gpc_reg_operand (operands[1], DImode))" > "@ > mr %0,%1 > ld%U1%X1 %0,%1 > std%U0%X0 %1,%0 > li %0,%1 > lis %0,%v1 > # > {cal|la} %0,%a1 > fmr %0,%1 > lfd%U1%X1 %0,%1 > stfd%U0%X0 %1,%0 > mf%1 %0 > mt%0 %1 > {cror 0,0,0|nop}" > [(set_attr "type" "*,load,store,*,*,*,*,fp,fpload,fpstore,mfjmpr,mtjmpr,*") > (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4")]) > > You'd want to remove the operations with "f" in their constraint > pattern: that is, no. 8 and 9. 8, 9, and 10. > An alternative idea would be to alter > the cost of the opration so that the compiler never chooses to put a > float in an int register. > > Andrew.