mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +00:00
Fix FP_TO_UINT with Scalar SSE2 now that the legalizer can handle it. We
now generate the relatively good code sequences: unsigned short foo(float a) { return a; } _foo: movss 4(%esp), %xmm0 cvttss2si %xmm0, %eax movzwl %ax, %eax ret and unsigned bar(float a) { return a; } _bar: movss .CPI_bar_0, %xmm0 movss 4(%esp), %xmm1 movapd %xmm1, %xmm2 subss %xmm0, %xmm2 cvttss2si %xmm2, %eax xorl $-2147483648, %eax cvttss2si %xmm1, %ecx ucomiss %xmm0, %xmm1 cmovb %ecx, %eax ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22786 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d2558e3e4a
commit
875f360e22
@ -141,12 +141,20 @@ namespace {
|
|||||||
setOperationAction(ISD::FP_TO_UINT , MVT::i1 , Promote);
|
setOperationAction(ISD::FP_TO_UINT , MVT::i1 , Promote);
|
||||||
setOperationAction(ISD::FP_TO_UINT , MVT::i8 , Promote);
|
setOperationAction(ISD::FP_TO_UINT , MVT::i8 , Promote);
|
||||||
setOperationAction(ISD::FP_TO_UINT , MVT::i16 , Promote);
|
setOperationAction(ISD::FP_TO_UINT , MVT::i16 , Promote);
|
||||||
setOperationAction(ISD::FP_TO_UINT , MVT::i32 , Promote);
|
|
||||||
|
if (!X86ScalarSSE)
|
||||||
|
setOperationAction(ISD::FP_TO_UINT , MVT::i32 , Promote);
|
||||||
|
|
||||||
// Promote i1/i8 FP_TO_SINT to larger FP_TO_SINTS's, as X86 doesn't have
|
// Promote i1/i8 FP_TO_SINT to larger FP_TO_SINTS's, as X86 doesn't have
|
||||||
// this operation.
|
// this operation.
|
||||||
setOperationAction(ISD::FP_TO_SINT , MVT::i1 , Promote);
|
setOperationAction(ISD::FP_TO_SINT , MVT::i1 , Promote);
|
||||||
setOperationAction(ISD::FP_TO_SINT , MVT::i8 , Promote);
|
setOperationAction(ISD::FP_TO_SINT , MVT::i8 , Promote);
|
||||||
|
setOperationAction(ISD::FP_TO_SINT , MVT::i16 , Promote);
|
||||||
|
|
||||||
|
// Expand FP_TO_UINT into a select.
|
||||||
|
// FIXME: We would like to use a Custom expander here eventually to do
|
||||||
|
// the optimal thing for SSE vs. the default expansion in the legalizer.
|
||||||
|
setOperationAction(ISD::FP_TO_UINT , MVT::i32 , Expand);
|
||||||
|
|
||||||
setOperationAction(ISD::BRCONDTWOWAY , MVT::Other, Expand);
|
setOperationAction(ISD::BRCONDTWOWAY , MVT::Other, Expand);
|
||||||
setOperationAction(ISD::MEMMOVE , MVT::Other, Expand);
|
setOperationAction(ISD::MEMMOVE , MVT::Other, Expand);
|
||||||
|
Loading…
Reference in New Issue
Block a user