137a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan/* ===-- cmpdi2.c - Implement __cmpdi2 -------------------------------------===
237a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan *
337a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan *                     The LLVM Compiler Infrastructure
437a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan *
59ad441ffec97db647fee3725b3424284fb913e14Howard Hinnant * This file is dual licensed under the MIT and the University of Illinois Open
69ad441ffec97db647fee3725b3424284fb913e14Howard Hinnant * Source Licenses. See LICENSE.TXT for details.
737a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan *
837a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan * ===----------------------------------------------------------------------===
91c5f89b1dd741135a4007ab577723d422f421eecAnton Korobeynikov *
1037a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan * This file implements __cmpdi2 for the compiler_rt library.
1137a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan *
1237a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan * ===----------------------------------------------------------------------===
1337a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan */
14b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
15b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar#include "int_lib.h"
16b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
171c5f89b1dd741135a4007ab577723d422f421eecAnton Korobeynikov/* Returns: if (a <  b) returns 0
1837a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan*           if (a == b) returns 1
1937a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan*           if (a >  b) returns 2
2037a6a455466e5b197311771a777ab241e471ed8aEdward O'Callaghan*/
21b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
221c5f89b1dd741135a4007ab577723d422f421eecAnton KorobeynikovCOMPILER_RT_ABI si_int
23b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar__cmpdi2(di_int a, di_int b)
24b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar{
25b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    dwords x;
26b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    x.all = a;
27b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    dwords y;
28b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    y.all = b;
298bf1e094893cb24796137b47ee0d46d18d299996Edward O'Callaghan    if (x.s.high < y.s.high)
30b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return 0;
318bf1e094893cb24796137b47ee0d46d18d299996Edward O'Callaghan    if (x.s.high > y.s.high)
32b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return 2;
338bf1e094893cb24796137b47ee0d46d18d299996Edward O'Callaghan    if (x.s.low < y.s.low)
34b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return 0;
358bf1e094893cb24796137b47ee0d46d18d299996Edward O'Callaghan    if (x.s.low > y.s.low)
36b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return 2;
37b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    return 1;
38b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar}
394785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover
404785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover#ifdef __ARM_EABI__
414785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover/* Returns: if (a <  b) returns -1
424785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover*           if (a == b) returns  0
434785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover*           if (a >  b) returns  1
444785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover*/
454785a776d09fb36bb2b162c3be40cd7ca017fce0Tim NorthoverCOMPILER_RT_ABI si_int
464785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover__aeabi_lcmp(di_int a, di_int b)
474785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover{
484785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover	return __cmpdi2(a, b) - 1;
494785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover}
504785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover#endif
514785a776d09fb36bb2b162c3be40cd7ca017fce0Tim Northover
52