1 Index: gcc-4.2.2/gcc/config/avr32/avr32.md
2 ===================================================================
3 --- gcc-4.2.2.orig/gcc/config/avr32/avr32.md 2008-09-19 14:23:34.000000000 +0200
4 +++ gcc-4.2.2/gcc/config/avr32/avr32.md 2008-09-19 14:30:18.000000000 +0200
6 (define_insn "*movsf_internal"
7 [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r,m")
8 (match_operand:SF 1 "general_operand" "r, G,F,m,r"))]
10 - && (register_operand (operands[0], SFmode)
11 - || register_operand (operands[1], SFmode))"
12 + "(register_operand (operands[0], SFmode)
13 + || register_operand (operands[1], SFmode))"
15 switch (which_alternative) {
17 case 1: return "mov\t%0, %1";
18 - case 2: return "mov\t%0, lo(%1)\;orh\t%0, hi(%1)";
21 + HOST_WIDE_INT target_float[2];
22 + real_to_target (target_float, CONST_DOUBLE_REAL_VALUE (operands[1]), SFmode);
23 + if ( TARGET_V2_INSNS
24 + && avr32_hi16_immediate_operand (GEN_INT (target_float[0]), VOIDmode) )
25 + return "movh\t%0, hi(%1)";
27 + return "mov\t%0, lo(%1)\;orh\t%0, hi(%1)";
30 if ( (REG_P(XEXP(operands[1], 0))
31 && REGNO(XEXP(operands[1], 0)) == SP_REGNUM)