Revision 0523c6b7

b/target-i386/ops_sse.h
61 61
        d->W(7) >>= shift;
62 62
#endif
63 63
    }
64
    FORCE_RET();
64 65
}
65 66

  
66 67
void OPPROTO glue(op_psraw, SUFFIX)(void)
......
114 115
        d->W(7) <<= shift;
115 116
#endif
116 117
    }
118
    FORCE_RET();
117 119
}
118 120

  
119 121
void OPPROTO glue(op_psrld, SUFFIX)(void)
......
138 140
        d->L(3) >>= shift;
139 141
#endif
140 142
    }
143
    FORCE_RET();
141 144
}
142 145

  
143 146
void OPPROTO glue(op_psrad, SUFFIX)(void)
......
183 186
        d->L(3) <<= shift;
184 187
#endif
185 188
    }
189
    FORCE_RET();
186 190
}
187 191

  
188 192
void OPPROTO glue(op_psrlq, SUFFIX)(void)
......
205 209
        d->Q(1) >>= shift;
206 210
#endif
207 211
    }
212
    FORCE_RET();
208 213
}
209 214

  
210 215
void OPPROTO glue(op_psllq, SUFFIX)(void)
......
227 232
        d->Q(1) <<= shift;
228 233
#endif
229 234
    }
235
    FORCE_RET();
230 236
}
231 237

  
232 238
#if SHIFT == 1
......
478 484
        d->L(i) = (int16_t)s->W(2*i) * (int16_t)d->W(2*i) +
479 485
            (int16_t)s->W(2*i+1) * (int16_t)d->W(2*i+1);
480 486
    }
487
    FORCE_RET();
481 488
}
482 489

  
483 490
#if SHIFT == 0
......
530 537
        if (s->B(i) & 0x80)
531 538
            stb(A0 + i, d->B(i));
532 539
    }
540
    FORCE_RET();
533 541
}
534 542

  
535 543
void OPPROTO glue(op_movl_mm_T0, SUFFIX) (void)
......
682 690
#define FPU_DIV(a, b) (a) / (b)
683 691
#define FPU_MIN(a, b) (a) < (b) ? (a) : (b)
684 692
#define FPU_MAX(a, b) (a) > (b) ? (a) : (b)
685
#define FPU_SQRT(a, b) sqrt(b)
693
#define FPU_SQRT(a, b) helper_sqrt(b)
686 694

  
687 695
SSE_OP_S(add, FPU_ADD)
688 696
SSE_OP_S(sub, FPU_SUB)
......
702 710
    s = (Reg *)((char *)env + PARAM2);
703 711
    s0 = s->XMM_S(0);
704 712
    s1 = s->XMM_S(1);
705
    d->XMM_D(0) = s0;
706
    d->XMM_D(1) = s1;
713
    d->XMM_D(0) = float32_to_float64(s0);
714
    d->XMM_D(1) = float32_to_float64(s1);
707 715
}
708 716

  
709 717
void OPPROTO op_cvtpd2ps(void)
......
711 719
    Reg *d, *s;
712 720
    d = (Reg *)((char *)env + PARAM1);
713 721
    s = (Reg *)((char *)env + PARAM2);
714
    d->XMM_S(0) = s->XMM_D(0);
715
    d->XMM_S(1) = s->XMM_D(1);
722
    d->XMM_S(0) = float64_to_float32(s->XMM_D(0));
723
    d->XMM_S(1) = float64_to_float32(s->XMM_D(1));
716 724
    d->Q(1) = 0;
717 725
}
718 726

  
......
721 729
    Reg *d, *s;
722 730
    d = (Reg *)((char *)env + PARAM1);
723 731
    s = (Reg *)((char *)env + PARAM2);
724
    d->XMM_D(0) = s->XMM_S(0);
732
    d->XMM_D(0) = float32_to_float64(s->XMM_S(0));
725 733
}
726 734

  
727 735
void OPPROTO op_cvtsd2ss(void)
......
729 737
    Reg *d, *s;
730 738
    d = (Reg *)((char *)env + PARAM1);
731 739
    s = (Reg *)((char *)env + PARAM2);
732
    d->XMM_S(0) = s->XMM_D(0);
740
    d->XMM_S(0) = float64_to_float32(s->XMM_D(0));
733 741
}
734 742

  
735 743
/* integer to float */
......
737 745
{
738 746
    XMMReg *d = (XMMReg *)((char *)env + PARAM1);
739 747
    XMMReg *s = (XMMReg *)((char *)env + PARAM2);
740
    d->XMM_S(0) = (int32_t)s->XMM_L(0);
741
    d->XMM_S(1) = (int32_t)s->XMM_L(1);
742
    d->XMM_S(2) = (int32_t)s->XMM_L(2);
743
    d->XMM_S(3) = (int32_t)s->XMM_L(3);
748
    d->XMM_S(0) = int32_to_float32(s->XMM_L(0));
749
    d->XMM_S(1) = int32_to_float32(s->XMM_L(1));
750
    d->XMM_S(2) = int32_to_float32(s->XMM_L(2));
751
    d->XMM_S(3) = int32_to_float32(s->XMM_L(3));
744 752
}
745 753

  
746 754
void OPPROTO op_cvtdq2pd(void)
......
750 758
    int32_t l0, l1;
751 759
    l0 = (int32_t)s->XMM_L(0);
752 760
    l1 = (int32_t)s->XMM_L(1);
753
    d->XMM_D(0) = l0;
754
    d->XMM_D(1) = l1;
761
    d->XMM_D(0) = int32_to_float64(l0);
762
    d->XMM_D(1) = int32_to_float64(l1);
755 763
}
756 764

  
757 765
void OPPROTO op_cvtpi2ps(void)
758 766
{
759 767
    XMMReg *d = (Reg *)((char *)env + PARAM1);
760 768
    MMXReg *s = (MMXReg *)((char *)env + PARAM2);
761
    d->XMM_S(0) = (int32_t)s->MMX_L(0);
762
    d->XMM_S(1) = (int32_t)s->MMX_L(1);
769
    d->XMM_S(0) = int32_to_float32(s->MMX_L(0));
770
    d->XMM_S(1) = int32_to_float32(s->MMX_L(1));
763 771
}
764 772

  
765 773
void OPPROTO op_cvtpi2pd(void)
766 774
{
767 775
    XMMReg *d = (Reg *)((char *)env + PARAM1);
768 776
    MMXReg *s = (MMXReg *)((char *)env + PARAM2);
769
    d->XMM_D(0) = (int32_t)s->MMX_L(0);
770
    d->XMM_D(1) = (int32_t)s->MMX_L(1);
777
    d->XMM_D(0) = int32_to_float64(s->MMX_L(0));
778
    d->XMM_D(1) = int32_to_float64(s->MMX_L(1));
771 779
}
772 780

  
773 781
void OPPROTO op_cvtsi2ss(void)
774 782
{
775 783
    XMMReg *d = (Reg *)((char *)env + PARAM1);
776
    d->XMM_S(0) = (int32_t)T0;
784
    d->XMM_S(0) = int32_to_float32(T0);
777 785
}
778 786

  
779 787
void OPPROTO op_cvtsi2sd(void)
780 788
{
781 789
    XMMReg *d = (Reg *)((char *)env + PARAM1);
782
    d->XMM_D(0) = (int32_t)T0;
790
    d->XMM_D(0) = int32_to_float64(T0);
783 791
}
784 792

  
785 793
#ifdef TARGET_X86_64
786 794
void OPPROTO op_cvtsq2ss(void)
787 795
{
788 796
    XMMReg *d = (Reg *)((char *)env + PARAM1);
789
    d->XMM_S(0) = (int64_t)T0;
797
    d->XMM_S(0) = int64_to_float32(T0);
790 798
}
791 799

  
792 800
void OPPROTO op_cvtsq2sd(void)
793 801
{
794 802
    XMMReg *d = (Reg *)((char *)env + PARAM1);
795
    d->XMM_D(0) = (int64_t)T0;
803
    d->XMM_D(0) = int64_to_float64(T0);
796 804
}
797 805
#endif
798 806

  

Also available in: Unified diff